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);
这个也是我从网上找的嘿嘿