2014-02-17 93 views
1

代碼:如何轉換foreach循環中的LINQ

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

如何foreach循環轉換爲LINQ上面的代碼?謝謝。

+0

你爲什麼要把它轉換成LINQ?這不是一個查詢...另外:什麼是'testMap'? –

+0

'testMap'是一個字典?你有沒有考慮過使用一套? – astef

+0

@astef,是的,'testMap'是字典。 –

回答

4

有時,「將{x}轉換爲LINQ」的正確方法是:不要。對於每項工作來說這都不是一個合適的工具。你目前的代碼與foreach和字典突變很好,因爲它是。收下。

如果重複的ID(後Distinct())不是一個問題,你也許可以這樣做:

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

但僅此而已。

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

這是一個值得懷疑的問題,究竟是LINQ的實際使用 - 甚至它是否真的是LINQ ......最終,它基本上*與原始問題中的代碼完全相同,除非沒有區別, 'ToList()',並有很多額外的委託間接。 –

+0

@Marc,我是aggree,我以前從來沒有遇到過linq的這麼小用處。 –

0

對於1行版本,你可以試試這個:

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

,將做整個操作在同一行,雖然我不是做的一切的鐵桿球迷一次,因爲它可以更難調試。

+0

'ForEach'沒有從上面的代碼填充。 –