【问题标题】:Lambda / LINQ find relations between multiple many-to-many relationship SQL tablesLambda / LINQ 查找多个多对多关系 SQL 表之间的关系
【发布时间】:2015-12-02 17:17:07
【问题描述】:

我正在做一个学校项目,其目标是创建一个可以处理多个洗衣店的系统,并具有适当的功能,例如预订洗衣机、用户处理等。

我有以下设计:

其中一项任务是遍历我的所有洗衣房,并显示在每个洗衣房的所有洗衣机上进行了多少预订。我一直试图在我的预订表和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();

但不确定如何进行。如何在多对多关系中找到相同的行?

【问题讨论】:

    标签: c# sql-server linq lambda


    【解决方案1】:

    您的查询可以简化为:

    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()));
    }
    

    【讨论】:

    • ReservationCount=l.LaundryMachines.Sum(lm=>lm.Reservations.Sum()) 好的,谢谢!在这里,您在 lm.Reservations 上计算 .Count() 而不是 Sum() 对吗? Sum 是 lambda 表达式函数 :)
    • @MortenKjærPedersen 是的,抱歉,应该是 .Count。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多