Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq对嵌套值求和_C#_Linq_Lambda - Fatal编程技术网

C# 使用Linq对嵌套值求和

C# 使用Linq对嵌套值求和,c#,linq,lambda,C#,Linq,Lambda,简单的问题:我的用户可以有很多订单,可以有很多产品。Linq(lambda)查询是什么样子的,以获取用户所有产品价格值的总和 我试过这个: int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price))); 但它给了我: 转换为值类型“Int32”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型 当然,用户可能没有任何订单,订单也可能没有任何产品。但产品价格不是一

简单的问题:我的用户可以有很多订单,可以有很多产品。Linq(lambda)查询是什么样子的,以获取用户所有产品价格值的总和

我试过这个:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price)));
但它给了我:

转换为值类型“Int32”失败,因为具体化的值为null。结果类型的泛型参数或查询必须使用可为空的类型

当然,用户可能没有任何订单,订单也可能没有任何产品。但产品价格不是一个可为空的值

所以我尝试了这个,认为它被空的收藏品噎住了:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price) ?? 0) ?? 0) ?? 0;
但是它抛出编译错误,说
的左侧不可为空

我做错了什么

提前谢谢

更新:使用Marc答案中的逻辑后,我的上述示例的工作版本:

int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => (int?)p.Price))) ?? 0;
将是我的奉献;有一个恼人的小问题,SQL中0行的总和是
NULL
,而不是
0
——上面的方法解决了这个问题

或作为lambdas(来自评论):


谢谢,这正是我需要的。我也在上面发布了一个备选方案(我最初尝试的修改版本)。
int total = (from user in users
             from order in user.Orders
             from product in order.Products
             select (int?)product.Price).Sum() ?? 0;
int total = users.SelectMany(user => user.Orders)
                 .SelectMany(order => order.Products)
                 .Sum(product => (int?)product.Price) ?? 0;