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&;简化传统的foreach嵌套循环;lambda表达式_C#_Linq_Lambda_Nested Loops - Fatal编程技术网

C# 使用linq&;简化传统的foreach嵌套循环;lambda表达式

C# 使用linq&;简化传统的foreach嵌套循环;lambda表达式,c#,linq,lambda,nested-loops,C#,Linq,Lambda,Nested Loops,(参见下面的代码片段)我想找到与coll2项匹配的coll1的所有项(coll2项的数量您可以这样做;不确定它是否更可读 var coll3 = (from selected in coll2 from item in coll1 where selected == item select item).ToList(); 更新。简单一点,如评论中所建议: coll3 = coll1.Where(co

(参见下面的代码片段)我想找到与coll2项匹配的coll1的所有项(coll2项的数量您可以这样做;不确定它是否更可读

var coll3 = (from selected in coll2
                from item in coll1
                where selected == item
                select item).ToList();
更新。简单一点,如评论中所建议:

coll3 = coll1.Where(coll2.Contains).ToList();

作为第一步,您可以使用子句使代码更具可读性:

    var coll1 = new List<int>() { 1, 2, 3, 4, 5 };
    var coll2 = new List<int>() { 2, 4 };
    var coll3 = new List<int>();
    foreach (var selected in coll2)
    {
        coll3.AddRange(coll1.Where(item => selected == item));
    }
var coll1=newlist(){1,2,3,4,5};
var coll2=新列表(){2,4};
var coll3=新列表();
foreach(coll2中选择的变量)
{
coll3.AddRange(coll1.Where(item=>selected==item));
}
您可以使用

但这不会像预期的那样起作用(见King的评论)…你可以这样做

coll2.Where(x=>coll1.Any(y=>x==y));
使用交集:


如果不想直接将结果分配给列表,可以将“ForEach”添加到Linq语句中:

coll1.Where(i => coll2.Contains(i)).ToList().ForEach(i => coll3.Add(i));

您可能希望检查不同的,但

您可以将其简化为:
var coll3=coll1.Where(coll2.Contains).ToList();
这对我来说似乎是最好的解决方案。+1这不会像预期的那样工作:如果
col2={1,2,3,4}
col1={2,2,4}
,这将返回
{2,4}
虽然结果应该是
{2,2,4}
?@KingKing很好的观察王..感谢指出..纠正了答案:)@Anirudh:对我来说是这样的:
coll3=coll2.Where(x=>coll1.Any(y=>x==y)).ToList()+1.这也正是resharper提出的建议。我想知道否决票是怎么回事。这个代码是正确的,为什么?尽管看起来有人在这里否决了所有答案…@马修·沃森:谁否决了?奇怪。我肯定我给了你+1:-)它并没有像预期的那样工作(见国王对阿尼鲁德答案的评论)。
coll1.Intersect(coll2);
coll2.Where(x=>coll1.Any(y=>x==y));
var coll3 = coll1.Intersect(coll2)
coll1.Where(i => coll2.Contains(i)).ToList().ForEach(i => coll3.Add(i));