C#中如何判断list是否完整包含另一个list
一般可以对两个集合做交集,然后比较剩余的集合和小的集合数的关系来确定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var listModel= new List<Model>(); //假设此集合为大的集合 var listModel2= new List<Model>(); //此集合为小集合 var result= listModel.Intersect(listModel2); if (result.Count()==listModel2.Count) { //此时大集合完整包含小集合 } else if (result.Any()&&result.Count()<listModel2.Count) { //此时小集合部分包含于大集合 } else { //此时交集无任何元素,表示他们没有相同的元素 } |
不过这个方法一般会有一些限制
因为Model可能是值类型也可能是引用类型
对于值类型,这么比较当然没问题,很容易的就得出结果了
但是对于引用类型,因为默认比较的是引用所以这里难以得到正确的结果;只能自己实现一个比较器
所以可以有另一个方法,就是根据Model的主键筛选出一个列表,然后根据此列表来查看list的包含关系
1
2
3
4
5
6
7
|
var listModel= new List<Model>(); //假设此集合为大的集合 var listModel2= new List<Model>(); //此集合为小集合 var listKey = listModel2.Select(c => c.Key).ToList(); if (listKey.All(c=>listModel.Any(s=>s.Key==c))) { //对于小集合的所有主键,如果它的任意一个键都存在于大集合中,就可以判定大集合全包含小集合 } |