List<User> users = new List();
// Some init code here, making say 3 users.
using (UsersDbContext)
{
// insert users
}
到目前为止一切顺利,工作正常。 现在我想查看记录是否匹配,因此我使用以下代码选择用户。
using (UsersDbContext dbc = UsersDbContext.GetDbContext())
{
List<Users> usersRead = dbc.Users.Where(x => x.ID >= users[0].ID && x.ID <= users[users.Count - 1].ID).ToList();
}
此抛出和异常:
System.NotSupportedException:LINQ to 实体无法识别该方法 'User get_Item(Int32)'方法,和 这种方法无法翻译成 商店表达。
EF很难看到我只是要求在Users [0] .ID中返回一个int 如果我用直接int替换对用户[0] .ID的调用 - 工作正常。
我得到它正在尝试做的事情,但我认为检查该方法是否属于.NET或Sql Server应该很容易?
答案 0 :(得分:1)
您正在尝试访问EF表达式中的索引器,该表达式不会转换为SQL查询。您必须将参数移到查询之外,如下所示:
int first = users[0].ID;
int last = users[users.Count - 1].ID;
List<Users> usersRead = dbc.Users.Where(x => x.ID >= first && x.ID <= last).ToList();