判断两个集合 笛卡尔乘机操作

1.适用于基本属性的集合

  • Intersect() 获取两个集合共有的部分

  • Except() 获取前有后没有的部分

  • 自带方法如果操作复杂的集合的话,应该是匹配的是全部属性
List<int> a=new List<int>(){1,2,3};
List<int> b=new List<int>(){2,3,4};
var list=a.Intersect(b);//获取a,b共有的部分  2,3  List<int> 类型
var list=a.Except(b);//获取a有b没有的部分 1

2.适用于复杂集合的操作

  • 获取两个集合中 Id 共有的部分

public class Model
{
    public int Id{get;set;}
    public string Name{get;set;}
}
List<Model> a=new List<Model>()
{
    new Model(){Id=1,Name="a"},
    new Model(){Id=2,Name="b"}
}
List<Model> b=new List<Model>()
{
    new Model(){Id=1,Name="a"},
    new Model(){Id=3,Name="c"}
}

var r = a.Where(l => b.Exists(s => l.Id == s.Id)).ToList();//Id共有的部分,意思是 如果 a中的Id 一旦满足 与b中的Id元素一致,那么就获取a 中满足条件的部分

var r = a.Where(s => !b.Exists(l => s.Id == l.Id)).ToList();//a id有 b 没有的 部分

 

3.数据库中也可以实现以上操作,如 Union (All) 并集 intersect 交集 except 差集 ,也是适合简单的操作一个字段    [sql 并交差资料](http://www.cnblogs.com/kissdodog/archive/2013/06/24/3152743.html)

4.在做类似项目的时候遇到一个问题,当集合类型是 IEnumerable<> 的时候是不存在 Exists 方法的,我的做法如下,用 .ToList() 现将其转换成 List 集合,即可解决此问题,并且 Linq 最后用 .ToList() 后可以

var list = model.List.ToList();
var needDeleteSupploerList = controllerSupplierList.Where(s => !list.Exists(l => s.Id == l.Id)).ToList();

 

转载于:https://www.cnblogs.com/wang-min/p/10333231.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值