C#中两个结构相同的DataTable相比较,列出不同的内容 200

就是说两个DataTable的字段(Column)完全一样,但是可能数据的条数不一样,也可能条数一样但其中某一条的某一列的数据不一样!所以,我想得到1:如果条数一样但数据... 就是说两个DataTable的字段(Column)完全一样,但是可能数据的条数不一样,也可能条数一样但其中某一条的某一列的数据不一样!
所以,我想得到1:如果条数一样但数据不一样,将不一样的数据列出来。
2:如果条数不一样,就将不一样的那条数据列出来即可!
列出来的数据,用什么接受都可以!!
拜托大神了!急
展开
 我来答
瑪利亞丶凝望
2018-01-18 · TA获得超过400个赞
知道小有建树答主
回答量:294
采纳率:69%
帮助的人:165万
展开全部

将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();
handangaoyang
2018-01-18 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:915万
展开全部

两种方法解决这个问题

  1. 粗暴方法。table1作为对比表。循环table2表中每行数据,然后循环每列数据。得到后与table1中的数据进行对比

  2. 优雅一些的方法。针对DataRow定义对应的class。然后class实现ICompare这个接口,定义比较规则。最后,将table1转换成List<class>,将table2转换成List<class>,然后调用Compare方法

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式