如何在另一种类型的列表列表中选择所有不同的字符串?

时间:2016-11-09 18:34:30

标签: c# linq list

我对LINQ还很新。我有以下“简化”数据结构:

List<List<Field>> myData = new List<List<Field>>();

Field由两个字符串成员TypeName组成。

我的目标是获得一个List<string>,其中包含与给定Name相对应的所有不同Type。我的第一个方法就是:

var test = myData
  .Where(a => a.FindAll(b => b.Type.Equals("testType"))
  .Select(c => c.Name)
  .Distinct());

有人对我有暗示吗? =)

2 个答案:

答案 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的一个解决方案