当我在LINQ中使用sum函数时出现此错误:
转换为值类型'Decimal'失败,因为具体化值为null.结果类型的泛型参数或查询必须使用可空类型.
GroupProduct.Where(a => a.Product.ProductID==1).Sum(Content => Content.Amount==null?0:Content.Amount),
Run Code Online (Sandbox Code Playgroud)
men*_*del 15
这就是我经常使用的.这将涵盖Amount为空的可能性,并且还包括空集的可能性.
GroupProduct.Where(a => a.Product.ProductID == 1)
.Select(c => c.Amount ?? 0) // select only the amount field
.DefaultIfEmpty() // if selection result is empty, return the default value
.Sum(c => c)
Run Code Online (Sandbox Code Playgroud)
DefaultIfEmpty()返回与Amount's类型关联的默认值int,在这种情况下,默认值为0.
mat*_*uma 11
您是否尝试过以下方法:
GroupProduct.Where(a => a.Product.ProductID==1).Sum(Content => (decimal?)Content.Amount)
Run Code Online (Sandbox Code Playgroud)
我的应用程序的代码如下:
var data = query.AsEnumerable().Select(row => TaskInfo.FetchTaskInfo(row,
ctx.ObjectContext.Hours.Where(hour => hour.TaskId == row.TaskId).Sum(hour => (decimal?)hour.Duration),
ctx.ObjectContext.Notes.Count(note => note.SourceType == (int)SourceType.Task && note.SourceId == row.TaskId)));
Run Code Online (Sandbox Code Playgroud)
您可以从源头排除吗?
var sum = GroupProduct.Where(a => a.Product.ProductID==1 && a.Amount != null)
.Sum(a => (decimal)a.Amount);
Run Code Online (Sandbox Code Playgroud)