按实体框架中的ID获取元素列表

Sha*_*ean 30 .net c# ef-code-first entity-framework-4.1

如何通过ID获取另一个列表中的所有元素?例如; 我有List角色; 我想通过他们的Id获取此列表中数据库中的所有角色.

我正在使用代码优先.

我做了这个,它扔了一个错误:

var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId));
Run Code Online (Sandbox Code Playgroud)

RoleId 是int类型.

错误:

无法创建"SampleMVC.Domain.Role"类型的常量值.在此上下文中仅支持原始类型(例如Int32,String和Guid').

moi*_*eme 68

var listOfRoleId = user.Roles.Select(r => r.RoleId);
var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));
Run Code Online (Sandbox Code Playgroud)

  • 这适用于小型数据集,但如果ID列表很大,您将需要以另一种方式执行此操作.http://stackoverflow.com/questions/1869753/maximum-size-for-a-sql-server-query-in-clause-is-there-a-better-approach (3认同)
  • 这是一个数据库调用吗? (2认同)

小智 11

如果user.Roles是一个int列表,这样的东西应该有效:

var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));
Run Code Online (Sandbox Code Playgroud)

这将它变成SQL中的"SELECT WHERE IN(x,y,z ...)".