LINQ实体框架选择非主键关系

时间:2011-07-03 17:46:05

标签: c# .net linq entity-framework

我有一个重叠关系的3类模型:

class worder {
  int workerID
}    
class shift {
  int shiftID,
  int workerID,
  ICollection tasks //tasks for this shift and this worker
}
class task {
  int workerID
  int shiftID
}    

如何填充包含各自.tasks的shift对象集合?类似的东西:

var q = from shift in db.shifts
  .Include(s => s.tasks.Where(t=>t.shiftID == s.shiftID && t.workerID = s.workerID))

修改

我已成功使用投影来创建jethro建议的匿名类型。但我想返回强类型的班级班。那可能吗?还是换挡模型设计不好?

1 个答案:

答案 0 :(得分:1)

您可以加入表格。

var joinedTables = from c in db.shifts
                   join p in db.tasks on c.ShiftID equals p.ShiftID & c.WorkerID equals p.WorkerID
select new {Shifts = c, Tasks = p };

请查看此Link以获取有关Linq联接的其他示例。

var shifts = db.shifts;
var tasks = db.tasks;

foreach(var shift in shifts)
{
    var shiftID = shift.ShiftID;
    var workerID = shift.WorkerID;
    shift.tasks = tasks.Where(p=>p.shiftID == shiftID & p.WorkerID == workerID);
}

关于上述内容对我来说感觉“不对”,我认为如果你再次看一下你的设计是最好的,当你拉动轮班时,轮班的任务应该自动填充。