我有一个项目列表'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
}
}
答案 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
}
}