zoukankan      html  css  js  c++  java
  • 判断两个集合 笛卡尔乘机操作

    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();
  • 相关阅读:
    [no code][scrum meeting] Alpha 12
    [no code][scrum meeting] Alpha 11
    [no code][scrum meeting] Alpha 10
    [no code][scrum meeting] Alpha 8
    Scrum Meeting #9 2020/04/18
    Scrum Meeting #8 2020/04/16
    Scrum Meeting #7 2020/04/15
    Scrum Meeting #6 2020/04/14
    Scrum Meeting #5 2020/04/13
    Scrum Meeting #4 2020/04/12
  • 原文地址:https://www.cnblogs.com/wang-min/p/10333231.html
Copyright © 2011-2022 走看看