2014-02-17 3 views
1

Кода:Как преобразовать цикл Еогеаспа в Linq

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

Как преобразовать цикл Еогеаспа в LINQ для приведенной выше коды? Благодарю.

+0

Почему вы хотите конвертировать его в LINQ? Это не запрос ... также: что такое 'testMap'? –

+0

'testMap' - это словарь? Рассматривали ли вы использование набора? – astef

+0

@astef, Да, 'testMap' - это словарь. –

ответ

4

Иногда правильный подход к «преобразованию {x} в LINQ»: нет. Это не подходящий инструмент для каждой работы. Ваш текущий код с foreach и словарной мутацией в порядке, как есть. Оставь это.

Если дублированные идентификаторы (после 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' не заполняется указанным выше кодом. –

Смежные вопросы