C# 使用Linq检查包含值的列表

C# 使用Linq检查包含值的列表,c#,linq,list,C#,Linq,List,我有一个列表,其中包含一些项目,例如 List<int> a= new List<int>(){ 2, 2, 3, 4, 5}; List<int> b= new List<int>() { 2, 2, 2, 6 }; List<List<int>[]> c = new List<List<int>[]>(); c.Add(new[]{a,b}); 将此扩展到c var result=c.Any(p

我有一个列表,其中包含一些项目,例如

List<int> a= new List<int>(){ 2, 2, 3, 4, 5};
List<int> b= new List<int>() { 2, 2, 2, 6 };
List<List<int>[]> c = new List<List<int>[]>();
c.Add(new[]{a,b});
将此扩展到c

var result=c.Any(p=> p.Select(value => value.Contains(2)).First());
//上面的代码p=>p.Selectvalue=>value.Contains2返回一个可枚举项,我取第一个。我不确定这是使用linq解决这个问题的正确方法。
有更好的方法吗?

您需要这样的方法:

c.Where(i=>i.Any(x=>x.Contains(2)))

你需要这样的东西:

c.Where(i=>i.Any(x=>x.Contains(2)))

如果您知道如何在单个列表中搜索,您应该能够以完全相同的方式在列表列表中搜索。只需使用相同的标准将其展平即可

对于您的情况,如果这是针对单一列表:

var result = a.Any(p => p == 2);
那么对于列表列表,它将是:

var result = c.SelectMany(x => x).Any(p => p == 2);
第三级与您的示例类似:

var result = c.SelectMany(x => x).SelectMany(x => x).Any(p => p == 2);

如果您知道如何在单个列表中搜索,您应该能够以完全相同的方式在列表列表中搜索。只需使用相同的标准将其展平即可

对于您的情况,如果这是针对单一列表:

var result = a.Any(p => p == 2);
那么对于列表列表,它将是:

var result = c.SelectMany(x => x).Any(p => p == 2);
第三级与您的示例类似:

var result = c.SelectMany(x => x).SelectMany(x => x).Any(p => p == 2);

我喜欢佩瑟拉尔的任何回答,只是一个小小的改变

c.Any(x => x.Any(y => y.Contains(2)))

我喜欢佩瑟拉尔的任何回答,只是一个小小的改变

c.Any(x => x.Any(y => y.Contains(2)))

c、 Anyx=>x.Anyy=>y.Anyz=>z==2如果你有一个列表列表,我想括号是多余的。不应该改为列表吗?很好-我犯了一个错误,将进行修正。>列表数组的列表的整数。。。horrorc.Anyx=>x.Anyy=>y.Anyz=>z==2如果你有一个列表列表,我想括号是多余的。不应该改为列表吗?很好-我犯了一个错误,将进行修正。>列表数组的列表的整数。。。恐怖我认为SelectMany表达了2d数组中的任何项目无论其位置如何都是最好的想法。我认为SelectMany表达了2d数组中的任何项目无论其位置如何都是最好的想法。