2011-03-08 125 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

相关问题