我对LINQ还很新。我有以下“简化”数据结构:
List<List<Field>> myData = new List<List<Field>>();
Field
由两个字符串成员Type
和Name
组成。
我的目标是获得一个List<string>
,其中包含与给定Name
相对应的所有不同Type
。我的第一个方法就是:
var test = myData
.Where(a => a.FindAll(b => b.Type.Equals("testType"))
.Select(c => c.Name)
.Distinct());
有人对我有暗示吗? =)
答案 0 :(得分:5)
您只需使用SelectMany
展平您的列表列表,然后按正常方式继续
var test = myData.SelectMany(x => x)
.Where(x => x.Type == "testType")
.Select(x => x.Name)
.Distinct()
.ToList();
或查询语法
var test = (from subList in myData
from item in subList
where item.Type == "testType"
select item.Name).Distinct().ToList();
答案 1 :(得分:1)
使用查询表示法的另一种方法:
var test= from list in myData
from e in list
where e.Type=="testType"
group e.Name by e.Name into g
select g.Key;
但最好选择@ juharr的一个解决方案