如何使用Entity Framework查询多对多实体

时间:2015-08-13 05:45:47

标签: c# entity-framework entity-framework-6

  1. Roles有很多Task
  2. Receivers有许多Role(类型为IEnumerable<ICollection>
  3. 用户 - &gt;作用

    任务 - &gt;作用

    如何编写查询以获取用户任务? 我尝试了下面的代码,但它返回v var userTasks = from role in Context.Users.Find(userId).Roles join taskRole in Context.Tasks.SelectMany(t => t.Receivers) on role.Id equals taskRole.Id select taskRole.Tasks; ;

    pickle

2 个答案:

答案 0 :(得分:0)

在SelectMany中,存储相应的任务

Context.Users.Find(userId).Roles
.Join(Context.Tasks.SelectMany(t => t.Receivers.Select(tr => new {t, tr})), 
    r => r.Id, 
    t => t.tr.Id, 
    (r, t) => t.t)
.Distinct() // if task override Equals/HashCode

答案 1 :(得分:0)

使用double from子句而不是join:

var userTasks = from role in Context.Users.Find(userId).Roles
                from task in role.Tasks
                select task;

或者如果你喜欢短路:

var userTasks = Context.UserAccount.Find(userID).Roles.SelectMany(role => role.Tasks);