2013-05-18 62 views
0

使用Asp.Net 4.0/C#是否有可能使用linq結合這兩個語句?

我有一個項目列表。該列表包含重複項。

這是項目類:

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語句可以同時組和序列嗎?

回答

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

Knagis - 謝謝完美 – dotnetnoob

1

某些enumerable方法在選擇器函數上有一個索引參數。其中之一是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(); 

這會給你任何外部變量的枚舉獨立的,因而是冪等,並沒有任何關閉。

相關問題