【问题标题】:Linq GROUP BY and SUM nullable longLinq GROUP BY 和 SUM 可为空长
【发布时间】:2018-12-21 20:23:38
【问题描述】:

这是我的代码:

var Summary = ccL3.GroupBy(g => new
            {                    
                g.JOB_BASE_NUM,
                g.TOP_CUSTOMER_ID,
                g.TOP_DESCRIPTION

            })
               .Select(g => new Type2
               {                       
                   JOB_BASE_NUM = g.Key.JOB_BASE_NUM,
                   TOP_CUSTOMER_ID = g.Key.TOP_CUSTOMER_ID,
                   TOP_DESCRIPTION = g.Key.TOP_DESCRIPTION,
                   SUM_JOB1 = g.Sum(gs => gs.JOB1)                       
               })

编辑:这不是重复的。前面的讨论不能直接用在 GROUP BY 中。

JOB1 可以长空。

问题是,如果 ccL3 中的所有 JOB1 为空,我需要 SUM_JOB1 为空(如果全部为空或总和为 0,则返回 0)。

我搜索了以下主题,但在linq中没有讨论GROUP BY中null的SUM。有人能帮助我吗。谢谢。

参考: handle null in linq sum

Linq query with nullable sum

Force linq sum to return null

【问题讨论】:

  • 对您链接的其中一个问题的回答可能会有所帮助:stackoverflow.com/a/43537187/2169762
  • 还有这个,它是一种扩展方法,可以完全满足您的需求:stackoverflow.com/a/43537671/2169762。也许您应该彻底查看您在自己的问题中链接的问题。
  • 如何通过代码在我的组中使用 TrueForAll?我试过没有成功。它说 IGrouping 不包含 TrueForAll 的定义...
  • @MartinParkin 我试图让这个扩展工作,写了这个 NullableSum 但在 group by 中,我把 JOB1= g.NullableSum(gs => gs.JOB1)....只是抛出错误:方法 NullableSum 没有重载以进行 1 次争论....你能举一个代码示例吗?

标签: c# linq sum nullable


【解决方案1】:

如果任何一项不为空,则使用Sum,否则为空

SUM_JOB1 = g.Any(gs => gs.JOB1 != null) ? g.Sum(gs => gs.JOB1) : null        

【讨论】:

  • 谢谢。这么简单的解决方案!
猜你喜欢
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多