LINQ to Entities无法编译存储表达式

时间:2014-08-30 05:17:12

标签: c# linq entity-framework

我使用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));

但没有任何运气:(

2 个答案:

答案 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}

我很惊讶甚至编译......但是,这仍然不是你的问题。您的问题出在未显示的代码中。您需要显示所有代码,因为其他因素导致此错误,与索引字符串变量有关。