2011-03-06 54 views
0

好吧,这件事情只是困惑我。 我有一个表,说用户,列UserID,名称等有一个对象映射到它使用CTP5。所以现在我想测试它,并执行以下操作:EF4抛出NotSupported异常时,它(IMHO)不应该

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到 实体无法识别方法 '用户get_Item(的Int32)' 方法,和 这种方法不能被翻译成 商店表达。

EF有困难,看到我只是要求在用户[0] .ID中返回一个int。
如果我用直接int替换对用户[0] .ID的调用 - 工作正常。

我得到它想要做的,但我认为应该很容易检查方法是属于.NET还是Sql Server?

回答

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(); 
+0

是的,这就是我最后做的。所以这是一种bug特性,我猜... – Evgeni 2011-03-06 15:38:17