0

使用 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 语句同时进行分组和排序?

4

2 回答 2

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();
于 2013-05-18T13:15:58.287 回答
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();

这将为您提供一个独立于任何外部变量的可枚举,因此是幂等的,并且没有任何闭包。

于 2013-05-19T21:45:37.357 回答