【问题标题】:Linq sum and nullLinq sum 和 null
【发布时间】:2012-01-29 14:42:31
【问题描述】:

我有疑问:

var qq = (from c in db.tblArcadeGames
        where
            c.IsDeleted == false &&
            c.ParentGameID == 0 &&
            c.Approved == true
        let aggPlays = c.Plays + db.tblArcadeGames.Where(v => v.ParentGameID == c.ID).Sum(v => (int?)v.Plays)
        orderby aggPlays descending
        select new { c, aggPlays })
        .Skip(Skip)
        .Take(Fetch);

foreach (var g in qq)
{
    HttpContext.Current.Response.Write("{" + g.aggPlays + "}\n");
}

当我在上面的循环中打印出aggPlays 时,它们会显示为:

{21}
{}
{}
{}

问题似乎是如果不存在记录,Sum() 返回null。我不知道如何解决这个问题,以便 c.Plays + null 不会等于 null 而只是 c.Plays

【问题讨论】:

    标签: c# asp.net linq sum


    【解决方案1】:

    您可以通过不返回 int? 来纠正此问题,而是直接转换为 int

    .Sum(v => v.Plays ?? 0)
    

    【讨论】:

    • 感谢这项工作!为什么在linq to sql中空集的总和为null?一个空集的总和应该是0吧?
    • @TomGullen "Sum() 对于普通 LINQ 中的空序列,总是返回 0;这似乎是 LINQ to SQL 的缺陷,即便如此,只有在您求和的值本身可以为空(因为否则 Sum 的返回类型将是普通的 decimal ,而不是 decimal? )。”来自connect.microsoft.com/VisualStudio/feedback/details/360365/…
    • @robjb 没有一个列可以为空,那么这是 linq to sql 中的错误吗?
    • @TomGullen 在我看来你是在告诉 LINQ 你想要 Sum() 一个 int? 值的集合,而这些值有时恰好是空的。我是不是误会了?
    • @robj 查询中的(int?) 是为了防止它抛出错误,我要做的就是对一组不可为空的整数求和。如果查询中不存在要求和的记录,它将返回 null,而我认为返回 0 会更好。
    【解决方案2】:
        int response =
        (from p in data.tbHoraires
         where p.eid == eid && p.annee == annee && p.obligatoire == true
         select (int?)p.nbminute ?? 0).Sum();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      相关资源
      最近更新 更多