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();
  • 相关阅读:
    2017/7/26 SCJP英语学习
    JSF(JavaServer Faces)简介
    Java回话技术
    2.2 对象深拷贝、浅复制、序列化
    编码与解码
    pycharm 教程(一)安装和首次使用
    Java Eclipse进行断点调试
    详细介绍如何在Eclipse中使用SVN
    SVN客户端安装与使用
    炸鸡
  • 原文地址:https://www.cnblogs.com/wang-min/p/10333231.html
Copyright © 2011-2022 走看看