复杂的Linq集合查询

时间:2012-01-27 21:19:33

标签: linq entity-framework

我有这个DB图,想要查询以查找给定区域中的所有UserLists。提供了RegionId。

DB Diagram

所以我可以通过这段代码获得所有部门(可能不是最好的方式......):

var region = context.Regions.Find(regionId);
IEnumerable<Department> departments = region.Areas
            .SelectMany(a => a.Workplaces)
            .SelectMany(w => w.Departments);

帐户可以有多个用户列表帐户可以链接到多个部门。有人可以制定一个查询来实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

为了完整性,最终的代码是:

        List<UserList> query2 = context.Regions.Where(r => r.RegionId == regionId)
            .SelectMany(r => r.Areas)
            .SelectMany(a => a.Workplaces)
            .SelectMany(w => w.Departments)
            .SelectMany(d => d.AccountsAllowedToPost)
            .Distinct()
            .SelectMany(da => da.Lists).ToList();

答案 1 :(得分:-1)

您可以使用let语法(或.Select方法)来导航ManyToOne关系。

var query =
  from r in context.Regions
  where r.RegionId == regionId
  from a in r.Areas
  from w in a.Workplaces
  from d in w.Departments
  from da in d.DepartmentAccounts
  let acc = da.Account
  from u in acc.UserLists
  select u;


var query2 = context.Regions.Where(r => r.RegionId == regionId)
  .SelectMany(r => r.Areas)
  .SelectMany(a => a.Workplaces)
  .SelectMany(w => w.Departments)
  .SelectMany(d => d.DepartmentAccounts)
  .Select(da => da.Account)
  .SelectMany(acc => acc.UserLists);