LINQ Group By Sum如何为十进制类型字段

时间:2015-05-09 13:16:12

标签: linq

我正在编写LINQ查询到返回null 如果它没有任何值(数据库中为null)但是如果它有0或正确的数字则返回 0或正确的数字在数据库中。

我关注了我的模型类

public class Test
{
  public decimal? TotalHours { get; set; }
}

以下是LINQ选择查询。此行成功为nullHours分配null。我很好,直到这里。

List<Test> Item = parentQuery
.Select(x => new Test
{
TotalHours Hours = (decimal?) x.TotalMinutes != null ? (decimal?) x.TotalMinutes : (decimal?)null,
}).ToList();

如果TotalHours为null,我的另一个group by query赋值为0,而我希望它被指定/保持为null。

List<Test> ItemList = Item.GroupBy(x => x.Id)
  .Select(x => new Test
   {
   TotalHours = x.Sum(y => (decimal?)y.TotalHours)
}).ToList();

我如何将null返回到我的视图?请不要建议Data Annotation方式。 感谢

1 个答案:

答案 0 :(得分:1)

这样做的一种方法是明确测试非null值的存在:

List<Test> ItemList = Item.GroupBy(x => x.Id)
    .Select(x => new Test {
        TotalHours = x.Any(y => y.TotalHours.HasValue) ? x.Sum(y => (decimal?)y.TotalHours) : null
    }
).ToList();

使用Any(...)的检查会在使用null之前验证该组至少有一个非Sum项。如果所有项都是null,则表达式会生成null结果。