当它(imho)不应该抛出NotInpported异常

时间:2011-03-06 15:24:57

标签: entity-framework-ctp5

好的,这件事让我很困惑。 我有一个表,比如用户,有UserID,Name等列。使用CTP5将对象映射到它。所以现在我想测试它,并执行以下操作:

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应该很容易?

1 个答案:

答案 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();