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


    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();
  • 相关阅读:
    浏览器渲染原理
    react ssr 从0到1实践
    阿里的上线水准
    http各个版本(1/1.1/2)对比
    可监控、可灰度、可回滚为什么会成为挑战?
    HTTP1、HTTP1.1、http2、http3的区别
    关于队头阻塞(HeadofLine blocking),看这一篇就足够了
    document.ready和window.onload的区别
    HTTP1和HTTP2的区别
    html,css,js加载顺序
  • 原文地址:https://www.cnblogs.com/wang-min/p/10333231.html
Copyright © 2020-2023  润新知