使用Asp.Net 4.0 / C#
我有一个项目列表。该列表包含重复项。
这是项目类:
public class PingtreeNode
{
public int TierId { get; set; }
public int LenderId { get; set; }
public int Weight { get; set; }
public int Seq { get; set; }
public PingtreeNode(int tierId, int lenderId, int weight, int seq)
{
TierId = tierId;
LenderId = lenderId;
Weight = weight;
Seq = seq;
}
}
在第一个实例中,我想为每个LenderId选择第一个项目。我这样使用这个linq:
var tierNodes = new List<PingtreeNode>();
tierNodes = tierNodes.GroupBy(x => x.LenderId).Select(x => x.First()).ToList();
但是,我还想在列表中添加一个序列,从1,2,3等开始。我目前通过这样循环来单独执行此操作:
int seq = 1;
foreach (var t in tierNodes)
{
t.Seq = seq;
seq++;
}
使用单个linq语句可以同时对组和序列进行分组吗?
答案 0 :(得分:3)
int seq = 1;
var tierNodes = new List<PingtreeNode>();
tierNodes = tierNodes
.GroupBy(x => x.LenderId)
.Select(x => { var y = x.First(); y.Seq = seq++; return y; })
.ToList();
答案 1 :(得分:1)
可枚举的某些方法在选择器函数上有一个索引参数。其中一个是Select。
您可以将该索引参数用于序列号:
var tierNodes = new List<PingtreeNode>();
tierNodes = tierNodes
.GroupBy(x => x.LenderId)
.Select((x, i) => { var y = x.First(); y.Seq = i + 1; return y; })
.ToList();
这将为您提供一个可枚举的独立任何外部变量,因此是幂等的,没有任何闭包。