C#中两个结构相同的DataTable相比较,列出不同的内容 200
就是说两个DataTable的字段(Column)完全一样,但是可能数据的条数不一样,也可能条数一样但其中某一条的某一列的数据不一样!所以,我想得到1:如果条数一样但数据...
就是说两个DataTable的字段(Column)完全一样,但是可能数据的条数不一样,也可能条数一样但其中某一条的某一列的数据不一样!
所以,我想得到1:如果条数一样但数据不一样,将不一样的数据列出来。
2:如果条数不一样,就将不一样的那条数据列出来即可!
列出来的数据,用什么接受都可以!!
拜托大神了!急 展开
所以,我想得到1:如果条数一样但数据不一样,将不一样的数据列出来。
2:如果条数不一样,就将不一样的那条数据列出来即可!
列出来的数据,用什么接受都可以!!
拜托大神了!急 展开
2个回答
展开全部
将DataTable转换为List<T>集合后一切好说。
例有以下两个DataTable:
DataTable table1 = new DataTable();
table1.Columns.Add("Name");
table1.Columns.Add("Age", Type.GetType("System.Int32"));
table1.Columns.Add("Gender");
DataRow row1 = table1.NewRow();
row1["Name"] = "张三";
row1["Age"] = 18;
row1["Gender"] = "男";
table1.Rows.Add(row1);
row1 = table1.NewRow();
row1["Name"] = "李四";
row1["Age"] = 17;
row1["Gender"] = "男";
table1.Rows.Add(row1);
DataTable table2 = new DataTable();
table2.Columns.Add("Name");
table2.Columns.Add("Age", Type.GetType("System.Int32"));
table2.Columns.Add("Gender");
DataRow row2 = table2.NewRow();
row2["Name"] = "张三";
row2["Age"] = 18;
row2["Gender"] = "男";
table2.Rows.Add(row2);
row2 = table2.NewRow();
row2["Name"] = "李四";
row2["Age"] = 18;
row2["Gender"] = "男";
table2.Rows.Add(row2);
转换辅助类
public class ConvertHelper<T> where T : new()
{
public static IList<T> ConvertToModel(DataTable dt)
{
// 定义集合
IList<T> ts = new List<T>();
// 获得此模型的类型
Type type = typeof(T);
string tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
tempName = pi.Name; // 检查DataTable是否包含此列
if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}
}
将两个table转换为List集合
List<Persion> p1 = ConvertHelper<Persion>.ConvertToModel(table1).ToList();
List<Persion> p2 = ConvertHelper<Persion>.ConvertToModel(table2).ToList();
Persion类
public class Persion
{
public string Name { get; set; }
public int Age { get; set; }
public string Gender { get; set; }
}
查询差集
var result = p1.Where(a => !p2.Exists(b => b.Name == a.Name && b.Age == a.Age && b.Gender == a.Gender )).ToList();
展开全部
两种方法解决这个问题
粗暴方法。table1作为对比表。循环table2表中每行数据,然后循环每列数据。得到后与table1中的数据进行对比
优雅一些的方法。针对DataRow定义对应的class。然后class实现ICompare这个接口,定义比较规则。最后,将table1转换成List<class>,将table2转换成List<class>,然后调用Compare方法
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询