我的表由三列组成(sno,name,age).我正在使用额外的列(行号)从数据库中检索此表,并使用以下代码:
select * from (
select ROW_NUMBER() over (order by SNo asc)as rowindex,SNo,Name,Age
from tblExample)
as example where rowindex between ((pageindex*10)+1) and ((pageindex+1)*10)
Run Code Online (Sandbox Code Playgroud)
注意,pageindex是一个变量,它接受用户传递的一些整数值.
我的数据库是Sql Server 2008.我想使用Linq编写相同的查询.我怎么做?
不是直接翻译,但由于您的行号似乎仅用于分页,请尝试:
db.tblExample
.OrderBy(t => t.SNo)
.Select((t,i) => new {rowindex = i+1, t.SNo, t.Name, t.Age })
.Skip(pageIndex * 10)
.Take(10);
Run Code Online (Sandbox Code Playgroud)
编辑
如果Select((t,i) => ...)不起作用,您可以尝试通过在对查询进行保湿后添加索引号来合成索引号:
db.tblExample
.OrderBy(t => t.SNo)
.Skip(pageIndex * 10)
.Take(10)
.AsEnumerable();
.Select((t,i) => new {rowindex = (pageIndex*10)+i+1, t.SNo, t.Name, t.Age })
Run Code Online (Sandbox Code Playgroud)
除了不从SQL查询返回字段的事实外,您应该使用等效rowindex的SQL,而是由成员选择表达式添加.
您可以将查询写为beow
var index=1;
var pageIndex=1;
var pageSize = 10;
data.Select(x => new
{
RowIndex = index++,
Sno = x.Sno,
Name = x.Name,
Age = x.Age
}).OrderBy(x => x.Name)
.Skip(pageSize * (pageIndex - 1)).Take(pageSize).ToList();
Run Code Online (Sandbox Code Playgroud)