Linq到实体导航属性

时间:2014-03-24 16:52:43

标签: c# linq entity-framework

在实体框架中,我有两个表(两个实体):具有一对多关系的人员和角色。 在People表中,我有一个到Role的导航属性:

//People.cs
public virtual ICollection<Role> Role { get; set; }

现在我想要检索所有角色为&#39; barman&#39;的人。我怎样才能实现这一目标? 我想在查询表达式方法中使用linq实体。我试过了:

var listPerson = (from p in SiContext.People
                 where p.Role.Name = 'barman'
                 select p).ToList();

问题是我无法制作p.Ruolo.Name,因为p.Ruolo是一个ICollectionType,它没有属性&#34; Name&#34; (而实体角色具有该属性)

3 个答案:

答案 0 :(得分:5)

由于角色是一个集合,您需要使用Any

var listPerson = (from p in SiContext.People
                 where p.Role.Any(x => x.Name == "barman")
                 select p).ToList();

答案 1 :(得分:0)

只是为了补充您的代码,包括 ToLower()

var listPerson = (from p in SiContext.People
                 where p.Role.Any(x => x.Name.ToLower() == "barman")
                 select p).ToList();

答案 2 :(得分:0)

您可以尝试订购方式(假设您具有反向导航属性)

var listPerson = SiContext.Role.First(r => r.Name == "barman").People.ToList();