联盟使用Linq列表

时间:2011-09-07 02:21:00

标签: c# linq

这不是一个复杂的问题,但我无法用linq包围它。

我的Enumerable<T>包含Enumerable<string>

public class
{
   List<List<string>> ListOfLists = new List<List<string>>();
}

我基本上想从ListOfLists返回每个唯一的字符串;这很容易使用foreach循环和存储变量(我可能会提高效率,但最终没有明显的区别,但这不是重点):

List<string> result = new List<string>();

foreach (var v in ListOfLists)
{
   foreach (var s in v)
   {
      result.Add(s);
   }
}

result.Distinct();

如何使用linq执行此操作?

4 个答案:

答案 0 :(得分:14)

答案 1 :(得分:11)

var distinctStrings = ListOfLists.SelectMany(list => list).Distinct();

答案 2 :(得分:5)

为了完整性,查询表达式语法有时比SelectMany的正确调用更容易(我发现)。这将是:

result = (from list in ListOfLists
          from s in list
          select s).Distinct().ToList();

答案 3 :(得分:1)

var result = ListOfLists.SelectMany(v => v).ToList().Distinct();

编辑:为了获得更好的性能,请使用:

var result = ListOfLists.SelectMany(v => v).Distinct();

var result = ListOfLists.SelectMany(v => v).Distinct().ToList();