Использовать LINQ вместо двух циклов



Я хочу преобразовать эти два "уродливых" для циклов в выражение LINQ. Кто-нибудь может мне помочь? Я довольно новичок в LINQ. заранее спасибо!



foreach (Edge edge in distinctEdge)
{
var c = 0;
foreach(Edge e in EdgeList)
{
if(e.target == edge.target && e.source == edge.source)
{
c++;
}
}
edge.value = c;
}
466   3  

3 ответов:

Use ReSharper :

foreach (var edge in distinctEdge)
{
    edge.value = EdgeList.Count(e => e.target == edge.target && e.source == edge.source);
}

Что-то легкое для чтения и понимания

  var value=(from edge in distinctEdge
    join e in EdgeList
   on edge.Target equals e.Target
   and e.source equals edge.source
   select edge ).Count();

Для полноты ответа на исходный вопрос я предложу следующее, Но я не думаю, что это так же читаемо, как использование цикла foreach, предложенного @dog-las для обновления. Тем не менее, я использовал этот метод обновления всех объектов в коллекции с помощью LINQ недавно для более простого обновления, так что думаю, что это удобно.

var result = distinctEdge.Select(c =>
        {
            c.value = EdgeList.Count(e => e.target == c.target
                                          && e.source == c.source);
            return c;
        }).ToList();

Comments

    Ничего не найдено.