Mat*_*att 25 c# entity-framework
码:
double cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.Sum(x => x.Quantity * x.Price);
Run Code Online (Sandbox Code Playgroud)
错误:
转换为值类型"Double"失败,因为实现值为null.结果类型的泛型参数或查询必须使用可空类型.
我已经看到了什么:
我做了什么:
double cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.DefaultIfEmpty()
.Sum(x => x.Quantity * x.Price);
Run Code Online (Sandbox Code Playgroud)
和:
double? cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.Sum(x => x.Quantity * x.Price);
Run Code Online (Sandbox Code Playgroud)
这些都不奏效.我知道问题的原因是该表中没有我传入的UserId中的行.在这种情况下,我更喜欢Sum()只返回0给我.有任何想法吗?
Jit*_*oli 60
最佳方案
double cafeSales = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd)
.Sum(x => (double?)(x.Quantity * x.Price)) ?? 0;
Run Code Online (Sandbox Code Playgroud)
您可以检查集合是否有正确的结果.
double? cafeSales = null;
var invoices = db.InvoiceLines
.Where(x =>
x.UserId == user.UserId &&
x.DateCharged >= dateStart &&
x.DateCharged <= dateEnd
)
.Where(x => x.Quantity != null && x.Price != null);
if (invoices.Any()) {
cafeSales = invoices.Sum(x => x.Quantity * x.Price);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24073 次 |
| 最近记录: |