2015-12-02 85 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。 –