linq查询分组和加入得到错误的总和

时间:2014-05-21 14:31:24

标签: linq linq-to-entities

我有以下代码,它们对某些值进行分组和求和。 总和“TotalCost”值是正确的,但是,当我取消注释行时,总和值是错误的(它小于它应该是)

我做错了什么,但无法弄清楚这一点。任何想法?

    from orderItem in Order_ProductItem
    //join ho in Hardware_Items on orderItem.OuterColour equals ho.Index
    //join hi in Hardware_Items on orderItem.InnerColour equals hi.Index
    where orderItem.SalesOrderID == 3272 && (orderItem.IsDeleted==null || orderItem.IsDeleted.Value == false)
    group new { orderItem/*, hi, ho*/} by orderItem.FrameNo into grp
    select new OrderItemModel
    {
    FrameNo = grp.Key,
    TotalCost = grp.Sum(x => x.orderItem.SellingPrice),
    //InternalColor = grp.FirstOrDefault().hi.Name,
    //ExternalColor = grp.FirstOrDefault().ho.Name,
    Quantity = grp.FirstOrDefault().orderItem.Quantity,

    }

基本架构

Order_ProductItem

  • FrameNo
  • OuterColour
  • InnerColour
  • SellingPrice

Hardware_Items

  • 索引
  • 名称

Order_ProductItem有FrameNo,它在表中多次列出,所以我试图让它对它们进行分组,然后对每个具有相同FrameNo的行的SellingPrice求和。

如果我排除该位以获得颜色(内部和外部),则总和是正确的。 在那种情况下,我如何还包括内部和外部颜色名称?

1 个答案:

答案 0 :(得分:0)

您可能需要使用left join,因为inner join会过滤掉您的部分数据。以下是有关如何更改首次加入的示例。

join ho in Hardware_Items on orderItem.OuterColour equals ho.Index into hog
from ho in hog.DefaultIfEmpty()