【问题标题】:Sum Columns from joined tables to get a calculated value using Linq to SQL使用 Linq to SQL 对联接表中的列求和以获取计算值
【发布时间】:2017-08-09 18:10:07
【问题描述】:

在上图中,我想为每个客户选择所有订单,然后为每个订单计算 TotalPrice =(订单中包含的所有食品的总和 * 数量)+ ExtraPrice。我正在努力使用 linq to sql 为其创建查询。

【问题讨论】:

    标签: c# linq-to-sql


    【解决方案1】:
    var res = (from a in dc.orders
                       join b in dc.orderLines on a.orderId equals b.fk_orderId
                       join c in dc.foodItems on b.fk_foodId equals c.foodId
                       where a.fk_custId == cID
                       group new { a,c,b } by a into g
                       select new 
                       {
                           OID1 = g.Key.orderId,
                           date1 = g.Key.date.Value.Date,
                           price1 = g.Sum(x => x.c.price * x.b.quantity) + g.Key.orderLines.Select(o => o.extraPrice).Sum()
                       });
    

    上面给出的是我正在寻找的 linq 查询。

    【讨论】:

      【解决方案2】:

      应该和这个差不多。我不在电脑旁进行测试,所以如果您遇到错误,请告诉我。

      db.orders.Select(o => new { o.orderid, o.date, TotalPrice = ( (o.orderLines.Select(ol => ol.food items.Count()).Sum() * o.Quantity) + o.extraPrice) } )
      

      【讨论】:

      • 在 ol.foodItems.Count() 处显示错误。不包含计数的定义。
      • 我还必须为客户 ID 指定 where 子句。
      • dc.orders.Select(o => new { o.orderId, o.date, TotalPrice = ( (o.orderLines.Select(ol => ol.foodItem.price).Sum() * decimal.Parse(o.orderLines.Select(ox => ox.quantity).ToString())) + decimal.Parse(o.orderLines.Select(x => x.extraPrice).ToString())) } ) ;试过这个,它抛出异常。无法翻译。
      • 我现在无法测试,但我想这与 decimal.Parse() 可能没有 T-SQL 等效项有关。请问您为什么要对其进行ToStringing,然后将其解析回decimal?如果您删除它,您可能会发现它的行为符合预期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 2021-09-26
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多