我只是想要包含一個行號與我的查詢的返回結果。LINQ顯示行號
我發現下面的職位,描述了我想實現,但給了我一個例外
http://vaultofthoughts.net/LINQRowNumberColumn.aspx
「表達式樹不能包含賦值運算符」
在MS SQL我只會使用ROWNUMBER()函數,我只是在LINQ中尋找等價物。
我只是想要包含一個行號與我的查詢的返回結果。LINQ顯示行號
我發現下面的職位,描述了我想實現,但給了我一個例外
http://vaultofthoughts.net/LINQRowNumberColumn.aspx
「表達式樹不能包含賦值運算符」
在MS SQL我只會使用ROWNUMBER()函數,我只是在LINQ中尋找等價物。
使用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 });
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 };
我不知道的LINQ to SQL是否支持它(但它propably會),但有一個overload到Queryable.Select接受帶有索引器的lambda的方法。你可以寫出如下查詢:
db.Authors.Select((author, index) => new
{
Lp = index, Name = author.Name
});
UPDATE:
我跑了幾個測試,但不幸的LINQ to SQL不支持此重載(包括3.5SP1和4.0)。它拋出與消息NotSupportedException
:使用
不支持超負荷查詢 操作「選擇」。
-1:沒有'Queryable.Select'將索引傳遞給委託。 – Richard 2010-05-10 17:07:36
@理查德:你還打擾過檢查嗎?這裏是我談到的重載:http://msdn.microsoft.com/en-us/library/bb534638.aspx。請重新評估您的否決投票。 – Steven 2010-05-10 17:42:41
我曾見過確認(但我現在無法找到 - 當然):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
請問我們有你自己的LINQ查詢嗎? – Jonathan 2010-05-10 09:20:21