2011-03-08 129 views
47

我是一個關於實體框架和linq的新手。我的查詢是這樣的LINQ to Entities不識別方法Int32 get_Item(Int32)

var query = (from d in db.MYTABLE 
      where d.RELID.Equals(myInts[0]) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 

當我執行這個代碼,我得到錯誤信息「LINQ到實體無法識別方法的Int32 get_Item(Int32)已」。我如何解決我的問題?

謝謝...

回答

108

您需要存儲您的int在一個變量,這樣的EntityFramework是不是要整個陣列拉入其範圍。

var myInt = myInts[0]; 

var query = (from d in db.MYTABLE 
      where d.RELID.Equals(myInt) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 
+2

一般來說,爲什麼LINQ to Entities試圖在那裏調用get_Item(Int32)? (問題)。 – SamFlushing 2014-08-30 13:26:11

+3

因爲C#正在生成涉及數組的表達式樹。這些表達式由EF轉換爲SQL,EF不知道該如何處理數組。 – 2015-08-19 19:12:00

6
var firstInt = myInts[0]; 
var query = (from d in db.MYTABLE 
      where d.RELID.Equals(firstInt) 
      select d.ID).Distinct(); 

List<int?> urunidleri = query.ToList(); 
+0

好吧,我看到了,但現在我得到了不同的錯誤。 「在這種情況下只支持原始類型('Int32,String和Guid')」 – 2011-03-08 13:46:07

+0

@ Murat,那麼myInts中的類型是什麼?將鼠標懸停在'firstInt'之前的'var'處找出。 – 2011-03-08 13:51:01

+0

我可以使用foreach for IQueryable 對象。例如 foreach(查詢中的var項){int x = item.Value} – 2011-03-08 14:02:38

-2

LINQ查詢最終轉化爲SQL查詢和LINQ不知道該怎麼做Session["UserName"](即獲取「用戶名」項)。

要解決一個常見的方法就是使用一個局部變量,你會分配Session["UserName"]和,你會在你的Linq查詢使用...

string loggedUserName = Session["LogedUsername"].ToString(); 
var userdetail = dc.faculties.Where(a => a.F_UserName.Equals(loggedUserName)).FirstOrDefault(); 

參考http://mvc4asp.blogspot.in/

+3

你確定你在這裏回答正確的問題嗎? OP根本沒有提及'Session',這個問題似乎有好幾年可以接受的答案(不是說這意味着你不能添加任何東西,但它更可能是一個錯誤)。 – Chris 2014-09-08 15:38:29

相關問題