2011-03-06 61 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

相關問題