2015-12-02 87 views
2

我正在进行一个学校项目,其目标是创建一个可以处理多个洗衣店的系统,并具有相应的功能,如为洗衣机,用户操作等Lambda/LINQ找到多个多对多关系SQL表之间的关系

我有如下设计:

enter image description here

其中一个任务就是通过我所有的洗衣店进行迭代,并显示有多少保留已经对所有的洗衣机中的洗衣机。我被困在试图找到我的预定表和laundrymachine表之间的相同关系。

我有以下代码:

var queryList = (from laundry in _db.Laundries 
       join laundryMachine in _db.LaundryMachines on laundry.LaundryID equals laundryMachine.LaundryID 
       join res in _db.Reservations on laundryMachine.Reservations.Where(x => x.LaundryMachines.Select(z => z.MachineID) == res.MachineID) 
       select laundry).ToList(); 

,但不知道如何着手。我如何在多对多的关系中找到相同的行?

回答

3

你的查询可以减少到只有:

var queryList = _db.Laundries 
    .Include(l=>l.LaundryMachines) 
    .Include(l=>l.LaundryMachines.Select(lm=>lm.Reservations)) 
    .ToList(); 

至于找出多少保留在每个洗衣:

var result=_db.Laundries 
    .Select(l=> new { 
    Laundry=l, 
    ReservationCount=l.LaundryMachines.Sum(lm=>lm.Reservations.Count()) 
    }); 

,或者如果你只是想用原来的查询结果:

foreach(var l in queryList) 
{ 
    Console.WriteLine("{0} has {1} reservations", 
    l.LaundryName, 
    l.LaundryMachines.Sum(lm=>lm.Reservations.Count())); 
} 
+0

ReservationCount = l.LaundryMachines.Sum(LM => lm.Reservations.Sum()) 好的,谢谢!在这里你可以用.Count()来代替Sum()对lm.Reservations是否正确?总和是lambda表达式函数:) – Mortenkp25

+0

@MortenKjærPedersen对不起,应该是.Count。 –