LINQ显示行号

时间:2010-05-10 09:14:30

标签: sql-server-2005 linq-to-sql

我只想在查询的返回结果中包含行号。

我发现以下帖子描述了我想要实现的目标,但却给了我一个例外

http://vaultofthoughts.net/LINQRowNumberColumn.aspx

“表达式树可能不包含赋值运算符”

在MS SQL中,我只使用ROWNUMBER()函数,我只是在LINQ中寻找等效函数。

3 个答案:

答案 0 :(得分: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 });

答案 1 :(得分:2)

我不确定LINQ to SQL是否支持它(但它确实会支持),但overload方法有Queryable.Select接受带有索引器的lambda。您可以按如下方式编写查询:

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

<强>更新

我运行了一些测试,但不幸的是LINQ to SQL不支持这种重载(3.5sp1和4.0)。它会抛出NotSupportedException消息:

  

用于查询的不支持的重载   运营商'选择'。

答案 2 :(得分: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 };