简单问题:我的用户可以拥有许多可以拥有许多产品的订单.Linq(lambda)查询是什么样的,以获得用户对所有Product.Price值的总计?
我试过这个:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price)));
Run Code Online (Sandbox Code Playgroud)
但它给了我:
转换为值类型"Int32"失败,因为实现值为null.结果类型的泛型参数或查询必须使用可空类型.
当然,用户可能没有任何订单,订单可能没有任何产品.但是Product.Price不是可以为空的值.
所以我尝试了这个,认为它在空集合上窒息:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => p.Price) ?? 0) ?? 0) ?? 0;
Run Code Online (Sandbox Code Playgroud)
但它正在抛出编译错误,说它的左侧??不可为空.
我究竟做错了什么?
提前致谢.
更新:从他的答案中使用Marc的逻辑后,我的上述示例的工作版本:
int total = users.Sum(u => u.Orders.Sum(o => o.Products.Sum(p => (int?)p.Price))) ?? 0;
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 31
int total = (from user in users
from order in user.Orders
from product in order.Products
select (int?)product.Price).Sum() ?? 0;
Run Code Online (Sandbox Code Playgroud)
会是我的奉献; 有一个恼人的小故障,SQL中的SUM超过0行NULL,而不是0- 上面的工作原理.
或作为lambdas(来自评论):
int total = users.SelectMany(user => user.Orders)
.SelectMany(order => order.Products)
.Sum(product => (int?)product.Price) ?? 0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7851 次 |
| 最近记录: |