C# 从两个对象查询IEnumerable列表和

C# 从两个对象查询IEnumerable列表和,c#,linq,C#,Linq,如何返回具有特定类型组管理员的用户/个人列表 模型 人 公共类人员:基本 { 公共日期时间DOB{get;set;} 公共虚拟ICollection PreferredName{get;set;} 公共虚拟ICollection前缀{get;set;} 公共虚拟ICollection GenderID{get;set;} 公共虚拟ICollection EthnicityID{get;set;} 公共虚拟ICollection EmailID{get;set;} 公共虚拟ICollection角

如何返回具有特定类型组管理员的用户/个人列表

模型

人
公共类人员:基本
{
公共日期时间DOB{get;set;}
公共虚拟ICollection PreferredName{get;set;}
公共虚拟ICollection前缀{get;set;}
公共虚拟ICollection GenderID{get;set;}
公共虚拟ICollection EthnicityID{get;set;}
公共虚拟ICollection EmailID{get;set;}
公共虚拟ICollection角色ID{get;set;}
}
角色
公共类角色:基本
{
{
公共字符串desc{get;set;}
}
}
这是我正在创建的方法

Method
public IEnumerable<Person> GetPersonWithGroup(IEnumerable<Roles> r)
{
   return context.Person.Where(x => r.Contains(x.RoleID));
}
方法
公共IEnumerable GetPersonWithGroup(IEnumerable r)
{
返回context.Person.Where(x=>r.Contains(x.RoleID));
}

您正在将每个角色对象与角色ID进行比较。。。您需要将ID与ID进行比较。我建议如下:

return context.Person.Where(x => r.Select(y => y.RoleID).Contains(x.RoleID));

这看起来像是一个
IQueryable
,而不是
IEnumerable
。您似乎正在查询数据库,不是内存中的集合。它是否必须与所有角色完全匹配,或者该人是否足以属于您通过的一个或多个角色?@Servy an
IQueryable
是一个
IEnumerable
@KennethK,摩托车是一个velocipede,您可以用脚推着它前进,但将摩托车视为velocipede很少是最有效的方法。@Kenneth是的,但与在同一
IQuerable
对象上调用两者时的行为截然不同,这是一种不同的功能。
return context.Person.Where(x => r.Select(y => y.RoleID).Contains(x.RoleID));