C# 搜索列表的列表

C# 搜索列表的列表,c#,.net,linq,C#,.net,Linq,我的目标如下: List<List<MyObj>> lst; 并且还尝试使用Any(),但运气不佳。您可以使用来展平列表,然后过滤元素: var result = lst.SelectMany(x => x).Where(y => y.ID == "1").ToList(); List list1=lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList(); 或 List list2=lst.Where(x=>x.

我的目标如下:

List<List<MyObj>> lst;
并且还尝试使用
Any()
,但运气不佳。

您可以使用来展平列表,然后过滤元素:

var result = lst.SelectMany(x => x).Where(y => y.ID == "1").ToList();
List list1=lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList();

List list2=lst.Where(x=>x.Any(y=>y.ID==“1”)).ToList();
结果取决于你想要什么。

是你的朋友。例如:

var listOfListsOfStrings = new List<List<string>>();

listOfListsOfStrings.Add(new List<string>() {"a", "b"});
listOfListsOfStrings.Add(new List<string>() {"c", "d"});

var allStrings = listOfListsOfStrings.SelectMany(s => s);

Console.WriteLine(string.Join(", ", allStrings.ToArray())); //prints: a, b, c, d

让我在已经很好的选项集中添加另一个选项。它使用
Hashset
进行搜索,通过转换内部
列表
,这将在数据大小更大时有所帮助,因为
Hashset
列表
有O(1)搜索,而不是O(N)搜索


结果
的类型为
列表
,将对其进行筛选,目前我们正在向
可枚举项提供
Func
。其中
,当在运行时提供数据时,则更容易构造
表达式
,它在运行时被编译成正确的
Func
delegate以过滤实际列表

所需的输出是什么?包含
MyObj
的列表或对象本身?您需要找到匹配的MyObj对象或包含它们的列表吗?或者你甚至需要过滤这些列表?获取objects@PlexisPlexis:因此
列出所需结果
?所需输出的格式应该是什么???是
List
还是
List
?还是
lst.SelectMany(x=>x.Where(y=>y.ID==“1”)).ToList()
@TimSchmelter我不认为有太大的区别,只是你的变体创建的枚举数比我的多得多。我怀疑是否存在性能差异。对某些人来说,它可能更容易阅读或理解。@GiladGreen没有必要写“明显的船长”评论
List<MyObj> list1 = lst.SelectMany(x => x.Where(y=> y.ID== "1")).ToList();
List<List<MyObj>> list2 = lst.Where(x => x.Any(y=> y.ID== "1")).ToList();
var listOfListsOfStrings = new List<List<string>>();

listOfListsOfStrings.Add(new List<string>() {"a", "b"});
listOfListsOfStrings.Add(new List<string>() {"c", "d"});

var allStrings = listOfListsOfStrings.SelectMany(s => s);

Console.WriteLine(string.Join(", ", allStrings.ToArray())); //prints: a, b, c, d
lst.SelectMany(x => x).Where(y => y.ID == "1")
List<List<MyObj>> lst;

var result = lst.where(x => 
             {
               // Assuming ID to be string type
               var hashset = new Hashset<string>(x.Select(y => y.ID));
               return hashset.Contains("1");
              }
           );
var result = lst.where(x => x.Any(y => y.ID == "1"));