lambda表达式为一对多关系

时间:2012-10-24 08:08:55

标签: c# linq lambda one-to-many

我确信这是一个愚蠢的问题,但我找了一个答案而找不到答案。

我有桌子

  1. 客户包含三列:userId,name和orderId。
  2. 订单包含三列:orderId,userId,price。
  3. 表之间的关系是一个客户到多个订单。

    我想对某些用户的订单价格求和。 看起来应该是这样的:

    double totalPrice = currentUser.Orders.Sum(x=>x.price);
    

    这不起作用。这样做的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:0)

decimal totalPrice = users.SelectMany(user => user.Orders)
                         .Sum(order => (decimal?)order.Price) ?? 0;

decimal totalPrice = (from user in users
                     from order in user.Orders
                     select (decimal?)order.Price).Sum() ?? 0;

<强>更新

使用double表示财务值是不合适的,因为它是二进制浮点点类型。将product.Price强制转换为decimal?表示它是可以为空的小数,因此需要使用Value属性来获取实际值(如果存在,则通过HasValue确定)< / p>

答案 1 :(得分:0)

我认为您应该从实体对象中选择用户(在本例中为userId = 1)

           int i= users.Single(x => x.UserID== 1).Orders.Sum(x => x.Price);