我想从LINQ查询中获取结果集中行的索引。
int i = 0;
if (methodId == 4 || methodId == 7)
{
sessions = db.sessions
.Where(x => x.id == Id)
.Select(x => new feeList
{
id = x.id,
title = "Title: " + (i++)
})
.ToList();
}
我尝试添加一个i++
,但是消息an expression tree may not contain an assignment operator
出错。
如何将结果集中的行索引添加到我的title
变量中。
答案 0 :(得分:3)
(推荐版本)由于EF LINQ不支持An expression tree may not contain an assignment operator
,因此必须使用ExecuteQuery
+ SQL row_number()
函数。
sessions = db.ExecuteQuery<feeList>(@"
select id,
'Title: ' + convert(varchar(10),row_number() over (order by id)) title
from session where ID = {0}"
, id).ToList();
(非推荐版本),或者如果数据很小并且不想使用sql,则可以使用ToList + select((object,index)=> YourLogic)
,因为ToList
会将SQL发送到DB并将数据获取到内存系统将使用LINQ Object
,因此它将支持assignment operator
:
sessions = db.sessions
.Where(x => x.id == Id).ToList()
.Select((x,i) => new feeList
{
id = x.id,
title = $"Title: {i}"
})
.ToList();
PS,索引从0开始:
new[] {"obj1","obj2"}.Select((obj, index) => new {obj,index})
Result :
objc index
obj1 0
obj2 1