2个list比较

laofang123456 2016-12-08 11:16:49
listA:
id:1 , date:2016/11/20 , isNew:false,isUpdate:false
id:2 , date:2016/11/20 , isNew:false,isUpdate:false
id:3 , date:2016/11/20 , isNew:false,isUpdate:false
listB:
id:1 , date:2016/11/20 , isNew:false,isUpdate:false
id:2 , date:2016/11/21 , isNew:false,isUpdate:false
id:3 , date:2016/11/21 , isNew:false,isUpdate:false
id:4 , date:2016/11/21, isNew:false,isUpdate:false

listB中有新增数据id4, 需要更新的数据(id2,id3),因为其date> listA中的date

删选后的数据要求如下

listC:
id:1 , date:2016/11/20 , isNew:false ,isUpdate:false //原数据
id:2 , date:2016/11/21 , isNew:false ,isUpdate:true //有更新数据
id:3 , date:2016/11/21 , isNew:false ,isUpdate:true //有更新数据
id:4 , date:2016/11/21, isNew:true , isUpdate:false //新增数据


listB.ForEach(b=>listA.Any(a=>{
if(a.id==b.id){
if(a.date<b.date){
b.isUpdate=true;
}
}else{ //不存在相同的id,表示新增
b.isNew=true;
}
return false;
}));

结果总是不正确,应该怎么写?最好不要用双循环
...全文
248 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoulRed 2016-12-10
  • 打赏
  • 举报
回复
List<int> list3 = list2.Except(list1).ToList(); 上面的就是求差集的方法
bigbaldy 2016-12-08
  • 打赏
  • 举报
回复

listB.ForEach(b =>listA.Any(a =>
            {
                if (a.id == b.id)
                {
                    b.isNew = false;//添加
                    if (a.date < b.date)
                    {
                        b.isUpdate = true;
                    }
                    return true;//添加
                }
                else
                {                       //不存在相同的id,表示新增
                    b.isNew = true;
                }
                return false;
            }));
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/library/bb336390
laofang123456 2016-12-08
  • 打赏
  • 举报
回复
引用 1 楼 diaodiaop 的回复:
如果我遇到这个问题 我觉得思路可以这样. A跟B先根据id date求出交集C 得到6条数据.如下 1 2 2 3 3 4 然后在group 如果date重复 就取最新的 就可以得到1 2 3 4 然后在select新的集合 多了2个字段.去A中判断 如果id不存在 isNew:true :false date的话 也一样能查询出是否更新 所以可能没有循环 只是使用linq就可以求出新的结果集.. 大概可以吧...
嗯,两个for循环倒是很简单,linq不知道怎么写
by_封爱 版主 2016-12-08
  • 打赏
  • 举报
回复
如果我遇到这个问题 我觉得思路可以这样. A跟B先根据id date求出交集C 得到6条数据.如下 1 2 2 3 3 4 然后在group 如果date重复 就取最新的 就可以得到1 2 3 4 然后在select新的集合 多了2个字段.去A中判断 如果id不存在 isNew:true :false date的话 也一样能查询出是否更新 所以可能没有循环 只是使用linq就可以求出新的结果集.. 大概可以吧...
tianlang_2008 2016-12-08
  • 打赏
  • 举报
回复
我记得linq里面有个方法是求差集,我觉得你在那上面想办法。。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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