我使用Entity Framework 6.0.1,我有下一个问题:
我有下一个数据库结构:
public class User
{
int Id { get; set;}
string E-mail {get; set;}
string Name {get; set;}
...
}
class House
{
string Id {get; set;}
string Name { get; set; }
string Street { get; set; }
. . .
IQueryable<User> Users { get; set; }
}
每个房子都可能链接到许多用户。任何用户都可能链接到许多房屋。
我需要创建一个查询,以获取特定用户附加的房屋列表 我只知道用户ID。
我写了下一个声明:
var houses = this.context.Houses
.Where(house => house.Users.Any(i => i.Id == my_searched_user_id));
但是我收到错误:LINQ to Entities无法识别方法'System.String ElementAtOrDefault [String](System.Collections.Generic.IEnumerable`1 [System.String],Int32)'方法,而且这个方法不能翻译成商店表达。
我将其更改为
var houses = this.context.Houses
.Where(house => house.Users.**ToList()**.Any(i => i.Id == my_searched_user_id));
但没有任何运气:(
答案 0 :(得分:1)
您在错误的位置添加了ToList。尝试下一个代码:
var houses = this.context.Houses
.Where(house => house.Users.Any(i => i.Id == my_searched_user_id))
.ToList();
ToList会将IQueryable转换为IEnumerable,因此将执行查询。
答案 1 :(得分:0)
您不应将Users集合定义为IQueryable。它应该是一个ICollection:
public virtual ICollection<User> Users {get;set}
我很惊讶甚至编译......但是,这仍然不是你的问题。您的问题出在未显示的代码中。您需要显示所有代码,因为其他因素导致此错误,与索引字符串变量有关。