LINQ to Entities不能识别方法Int32 get_Item(Int32)。

71

我是一个关于Entity Framework和LINQ的新手。我的查询如下:

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

List<int?> urunidleri = query.ToList();
当我执行这段代码时,出现了错误消息“LINQ to Entities不识别Int32 get_Item(Int32)方法”。我该如何解决问题?
谢谢...
3个回答

159
你需要将你的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();

3
一般来说,LINQ to Entities 为什么会在那里尝试调用 get_Item(Int32) 方法?(问题帖子) - SamFlushing
6
因为C#生成了涉及数组的表达式树。这些表达式会被 EF 转换为 SQL,但是 EF 不知道如何处理数组。 - John Gietzen

8
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();

好的,我明白了,但现在我遇到了不同的错误。"仅支持原始类型(例如Int32、String和Guid)在此上下文中使用"。 - Murat Güzel
@Murat,那么myInts的类型是什么?将鼠标悬停在firstInt之前的var上以查找。 - Albin Sunnanbo
我可以在IQueryable<int>对象上使用foreach吗?例如: foreach(var item in query){ int x = item.Value } - Murat Güzel
1
@Murat,是的,如果MYTABLE.ID是一个整型。 - Albin Sunnanbo

-1
Linq 查询最终会转换成 SQL 查询,但 LINQ 不知道如何处理 Session["UserName"](它获取 "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/


4
您确定您在这里回答了正确的问题吗?原帖中并没有提到“Session”,而且这个问题好像已经有一个被接受的答案数年了(这并不意味着您不能添加内容,但这更可能是一个错误)。 - Chris
用户的答案是正确的 - 它与被接受的答案同义,且更为简化。本质上,“Linq查询最终会转换为SQL查询,而LINQ不知道该怎么做”。 - Tjad Clark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接