Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq联合列表_C#_Linq - Fatal编程技术网

C# 使用Linq联合列表

C# 使用Linq联合列表,c#,linq,C#,Linq,这不是一个很复杂的问题,但我不能用linq来解决它 我有一个可枚举的包含一个可枚举的: 公共类 { List ListOfLists=新列表(); } 我基本上希望从列表中返回每个唯一的字符串;使用foreach循环和存储变量很容易(我可能会提高在最后不使用distinct的效率,但这不是重点): 列表结果=新列表(); foreach(列表中的var v) { foreach(v中的var s) { 结果。添加(s); } } result.Distinct(); 如何使用linq执行此操

这不是一个很复杂的问题,但我不能用linq来解决它

我有一个
可枚举的
包含一个
可枚举的

公共类
{
List ListOfLists=新列表();
}
我基本上希望从列表中返回每个唯一的字符串;使用foreach循环和存储变量很容易(我可能会提高在最后不使用distinct的效率,但这不是重点):

列表结果=新列表();
foreach(列表中的var v)
{
foreach(v中的var s)
{
结果。添加(s);
}
}
result.Distinct();

如何使用linq执行此操作?

使用
SelectMany
。看

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

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


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

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

不需要中间的收费表,如果您确实需要收费表,请在不同的时间之后而不是之前进行。在本例中,Distinct现在返回的IEnumerable可能不是您想要的。此外,在整个列表中列出结果,然后将结果限制为Distinct,而不是先执行Distinct,这对内存/性能有很大的影响。@Jim Wooley-很好的建议。谢谢你和RichK的反馈。我们已经学会了。非常感谢!!!-我使用Linq-var result=ListOfLists.SelectMany(v=>v.Where(m=>ListOfLists.TrueForAll(n=>n.Contains(m))).Distinct().ToList()使列表“相交”;你已经有答案了。我建议尝试一下这个问题的扩展方法!您的扩展方法以优化的方式执行SelectMany和Distinct。
var distinctStrings = ListOfLists.SelectMany(list => list).Distinct();
var result = ListOfLists.SelectMany(v => v).ToList().Distinct();
var result = ListOfLists.SelectMany(v => v).Distinct();
var result = ListOfLists.SelectMany(v => v).Distinct().ToList();
result = (from list in ListOfLists
          from s in list
          select s).Distinct().ToList();