日期:2014-05-20  浏览次数:21154 次

LINQ过滤两个集合的交集,获得差集。
有两个集合,
  List<TmpClCldocInfo> list1 = new List<TmpClCldocInfo>() { new TmpClCldocInfo() { UNIT_ID = "1", DOC_NUM = "1" }, new TmpClCldocInfo() { UNIT_ID = "2", DOC_NUM = "2" } };
            List<TmpClCldocInfo> list2 = new List<TmpClCldocInfo>() { new TmpClCldocInfo() { UNIT_ID = "1", DOC_NUM = "1" }, new TmpClCldocInfo() { UNIT_ID = "2", DOC_NUM = "2" }, new TmpClCldocInfo() { UNIT_ID = "3", DOC_NUM = "3" } };

怎样用linq过滤掉两个集合的交集 拿到他们的差集 “new TmpClCldocInfo() { UNIT_ID = "3", DOC_NUM = "3" }”  这个数据呢?
LINQ过滤

------解决方案--------------------

Except操作符是从一个集合中取另一个集合的差集,即从集合A中取出集合B中不包含的元素。
如:两个集合,infos和temp,temp集合中包含了infos集合中不存在的元素

var infos = from p in context.Infos.ToList() select p;
var temp = infos.Where(p => p.Sex == true).ToList();
temp.Add(new Info
{
    Code = "p100",
    Name = "哈哈",
    Sex = false,
    Nation = "n004",
    Birthday = DateTime.Now
});

使用扩展方法:

var q = infos.Except(temp);

使用查询表达式语法:

var q = (from p in infos select p).Except(from m in temp select m);


这个也是我从网上找的嘿嘿