关于两个DataTable筛选的问题

chenmozhijin 2014-09-10 10:24:26
各位好,我有两个DataTable,分别叫DT1和DT2。比方说情况1:DT1里有4条DataRow,DT2里有3条DataRow,我想要达到的目的的是筛选出DT1里和DT2中新增加的那一条数据。情况2:DT1里有3条DataRow,DT2里有4条DataRow,假设DT1和DT2有两条DataRow是相同的,我想获得DT1里新增加的那条,DT2里的不管。情况3:DT1和DT2里的DataRow条数一样,数据一样返回的是个DataRow的空数组。
我的处理代码如下:
DataRow[] DRTemp1= DT1.AsEnumerable().ToArray();
DataRow[] DR2= DT2.AsEnumerable().ToArray();
DataRow[] DRResult= DR2.Except(DRTemp1).ToArray();

每次DRResult获得到得都是DR2的数据,跟没有被筛选过一样。

谢谢各位
...全文
181 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2014-09-10
  • 打赏
  • 举报
回复
先把数据转换为list里,通过linq你想做什么都可以
zjpaybc 2014-09-10
  • 打赏
  • 举报
回复
引用 5 楼 zjpaybc 的回复:
用foreach循环吧 foreach (DataRow dr in DT2.Rows) { for (int i = DT1.Rows.Count; i >0; i--) { if (dr[""].ToString() == DT1.Rows[i][""].ToString())//相同条件 DT1.Rows.Remove(DT1.Rows[i]); } }
返回的DT1就是你想要的数据
zjpaybc 2014-09-10
  • 打赏
  • 举报
回复
用foreach循环吧 foreach (DataRow dr in DT2.Rows) { for (int i = DT1.Rows.Count; i >0; i--) { if (dr[""].ToString() == DT1.Rows[i][""].ToString())//相同条件 DT1.Rows.Remove(DT1.Rows[i]); } }
chenmozhijin 2014-09-10
  • 打赏
  • 举报
回复
请问吧友里是什么地方啊?
於黾 2014-09-10
  • 打赏
  • 举报
回复
LINQ我不是太熟,因为我平时都用05,不用10以上的版本开发 吧友里有许多精通LINQ的大神 解决你的问题,只需要一句代码
chenmozhijin 2014-09-10
  • 打赏
  • 举报
回复
To Z65443344 那需要怎么处理啊?
於黾 2014-09-10
  • 打赏
  • 举报
回复
坐等LINQ大神帮你解答 DataRow是引用类型,你使用Except,只能是同一张表里这样用,不同的表指向的对象不一样,当然无法匹配上.
mnxm 2014-09-10
  • 打赏
  • 举报
回复
public static DataRow[] Fun(DataTable dt1, DataTable dt2)
        {
            return dt1.Rows.Cast<DataRow>().Where(x => dt2.Rows.Cast<DataRow>()
                .Where(y => y.ItemArray.Except(x.ItemArray).Count() <= 0).Count() <= 0).ToArray();
        }
mnxm 2014-09-10
  • 打赏
  • 举报
回复
bool b = object.Equals(dt1.Rows[0], dt2.Rows[0]); 这句没用 忘记注掉了
mnxm 2014-09-10
  • 打赏
  • 举报
回复
public static DataRow[] Fun1()
        {
            DataTable dt1 = new DataTable();
            dt1.Columns.Add("AA");
            dt1.Columns.Add("BB");
            dt1.Rows.Add("aa", "bb");
            dt1.Rows.Add("aaa","bbb");
            DataTable dt2 = new DataTable();
            dt2.Columns.Add("AA");
            dt2.Columns.Add("BB");
            dt2.Rows.Add("aa", "bb");
            bool b = object.Equals(dt1.Rows[0], dt2.Rows[0]);

            return dt1.Rows.Cast<DataRow>().Where(x => dt2.Rows.Cast<DataRow>().Where(y => y.ItemArray.Except(x.ItemArray).Count() <= 0).Count() <= 0).ToArray();
        }
chenmozhijin 2014-09-10
  • 打赏
  • 举报
回复
自己顶一下!
chenmozhijin 2014-09-10
  • 打赏
  • 举报
回复
To hdhai9451 请问怎么转换成list?

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧