C# 使用LINQ而不是两个for循环

C# 使用LINQ而不是两个for循环,c#,linq,C#,Linq,我想将这两个“丑陋的”for循环转换为LINQ表达式。有人能帮我吗?我对林克是个新手。提前谢谢 foreach (Edge edge in distinctEdge) { var c = 0; foreach(Edge e in EdgeList) { if(e.target == edge.target && e.source == edge.source) { c++; }

我想将这两个“丑陋的”for循环转换为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;
}
使用:


容易阅读和理解的东西

  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();

为了完整地回答最初的问题,我将提出以下建议,但我认为它不如使用@dog las提出的foreach循环进行更新可读。不过,我最近确实使用了这种方法,使用LINQ更新集合中的所有对象,以便进行更简单的更新,所以我认为这很方便

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

是的,你的答案是正确的,我必须安装这个强大而奇妙的工具。谢谢你@doglas ReSharper是c#development的必备工具CodeRush也是一个很好的工具。ReSharper是一个很好的工具,但有时可读性和可维护性是第一要务,ReSharper重构的结果有时可能更难阅读和理解。@togocoder of couse,首先,代码必须是可维护的,但这不是问题,对我来说,它变得更好了。也很有效。我相信这种方法有点像SQLJOIN,在两个列表中找到相互的元素,然后得到它的计数。
var result = distinctEdge.Select(c =>
        {
            c.value = EdgeList.Count(e => e.target == c.target
                                          && e.source == c.source);
            return c;
        }).ToList();