如何将foreach循环转换为linq

时间:2014-02-17 12:21:54

标签: c# linq c#-4.0 if-statement foreach

代码:

           foreach (var item in testItems.Distinct())
            {
                if (!testMap.ContainsKey(item.GetId()))
                {
                    testMap.Add(item.GetId(), item);
                }
            }

如何将foreach循环转换为linq以获取上述代码?感谢。

3 个答案:

答案 0 :(得分:4)

有时“将{x}转换为LINQ”的正确方法是:不要。它不适合每项工作。您当前使用foreach和字典变异的代码很好。保持它。

如果重复的ID(在Distinct()之后)不是问题,您可以这么做:

var map = testItems.Distinct().ToDictionary(x => x.GetId());

但那是关于它的。

答案 1 :(得分:0)

testItems.ToList().ForEach(item=>
{
 if (!testMap.ContainsKey(item.GetId()))
 {
   testMap.Add(item.GetId(), item);
 }
});

答案 2 :(得分:0)

对于1行版本,您可以尝试:

testItems.Distinct().Where(i => !testMap.ContainsKey(i.GetId()).ForEach(f => testMap.Add(f.GetId, f));

这将在一行中完成整个操作,虽然我不是一次做所有事情的忠实粉丝,因为它可能更难调试。