2010-05-10 38 views
0

我只是想要包含一個行號與我的查詢的返回結果。LINQ顯示行號

我發現下面的職位,描述了我想實現,但給了我一個例外

http://vaultofthoughts.net/LINQRowNumberColumn.aspx

「表達式樹不能包含賦值運算符」

在MS SQL我只會使用ROWNUMBER()函數,我只是在LINQ中尋找等價物。

+0

請問我們有你自己的LINQ查詢嗎? – Jonathan 2010-05-10 09:20:21

回答

2

使用AsEnumerable()在客戶端上評估您的查詢的最後一部分,並在最後部分添加計數器列:

int rowNo = 0; 
var results = (from data in db.Data 
       // Add any processing to be performed server side 
       select data) 
       .AsEnumerable() 
       .Select(d => new { Data = d, Count = ++rowNo }); 
0

LINQ to SQL允許您映射SQL函數。雖然我沒有測試過這個,我覺得這個結構將工作:

public partial class YourDataContext : DatContext 
{ 
    [Function(Name = "ROWNUMBER")] 
    public int RowNumber() 
    { 
     throw InvalidOperationException("Not called directly."); 
    } 
} 

而且寫出如下查詢:

from author in db.Authors 
select new { Lp = db.RowNumber(), Name = author.Name }; 
2

我不知道的LINQ to SQL是否支持它(但它propably會),但有一個overloadQueryable.Select接受帶有索引器的lambda的方法。你可以寫出如下查詢:

db.Authors.Select((author, index) => new 
{ 
    Lp = index, Name = author.Name 
}); 

UPDATE:

我跑了幾個測試,但不幸的LINQ to SQL不支持此重載(包括3.5SP1和4.0)。它拋出與消息NotSupportedException:使用

不支持超負荷查詢 操作「選擇」。

+1

-1:沒有'Queryable.Select'將索引傳遞給委託。 – Richard 2010-05-10 17:07:36

+1

@理查德:你還打擾過檢查嗎?這裏是我談到的重載:http://msdn.microsoft.com/en-us/library/bb534638.aspx。請重新評估您的否決投票。 – Steven 2010-05-10 17:42:41

+0

我曾見過確認(但我現在無法找到 - 當然):ORM通常不會實現它。另見http://stackoverflow.com/questions/1873850/which-orm-tools-support-this-version-of-queryable-select-extension-method/1905527 – Richard 2010-05-10 22:35:10