当使用带有嵌套循环的linq时,这是最好的方法吗?

时间:2013-08-30 09:10:43

标签: linq

我有一个项目列表'ActiveNodes'。每个项目属于“层”,因此具有tierID。 TierID不是唯一的。我想要做的是循环所有项目,然后循环层中的每个项目。这就是我接近它的方式,但考虑到linq的灵活性,我想知道是否有更好的方法。

        var tiers = ActiveNodes.Select(x => x.TierID).Distinct();

        foreach (var t in tiers)
        {
            var nodes = ActiveNodes.Where(x => x.TierID == t);

            foreach(var n in nodes)
            {
                // do something
            }
        }

1 个答案:

答案 0 :(得分:3)

您应该使用GroupBy

var tiers = ActiveNodes.GroupBy(x => x.TierID);

foreach (var t in tiers)
{
    // Id for current group can be taken from t.Key property
    var tierId = t.Key;

    // t implements IEnumerable<Node>, so you can loop over it directly
    foreach(var n in t)
    {
        // do something
    }
}