using System.Text;
using SqlSugar;
namespace DS.Module.SqlSugar;
///
/// sqlsuagr差异帮助类
///
public static class SqlSugarDiffUtil
{
///
/// 比较两个数据对象的修改内容
///
///
///
///
public static DiffLog GetDiff(List beforeData, List afterData)
{
string mianID = null;
if (beforeData != null && beforeData.Count>0)
{
var keyCoulumn = beforeData[0].Columns.FirstOrDefault(p => p.IsPrimaryKey == true);
if (keyCoulumn != null)
{
mianID = keyCoulumn.Value.ToString();
}
}
else if (afterData != null && afterData.Count > 0)
{
var keyCoulumn = afterData[0].Columns.FirstOrDefault(p => p.IsPrimaryKey == true);
if (keyCoulumn != null)
{
mianID = keyCoulumn.Value.ToString();
}
}
StringBuilder sb = new StringBuilder();
if (beforeData != null && afterData != null)
{
var befroeColumns = beforeData[0].Columns;
var afterCloums = afterData[0].Columns;
foreach (var item in befroeColumns)
{
if (IgnoreColumns.Contains(item.ColumnName))
continue;
var afterItem = afterCloums.FirstOrDefault(p => p.ColumnName == item.ColumnName && !p.Value.Equals(item.Value));
if (afterItem != null)
{
sb.Append($"[字段:{item.ColumnDescription},修改前:{item.Value},修改后:{afterItem.Value}]");
}
}
}
return new DiffLog { Id = mianID, DiffData = sb.ToString() };
}
public class DiffLog
{
///
/// 主键Id
///
public string Id { get; set; }
///
/// 差异数据
///
public string DiffData { get; set; }
}
///
/// 忽略的字段
///
private static readonly List IgnoreColumns = new List()
{
"CreateTime",
"CreateUserName",
"CreateBy",
"UpdateTime",
"UpdateUserName",
"UpdateBy",
"DeleteTime",
"DeleteUserName",
"DeleteBy",
};
}