【问题标题】:Return a value of 1 if linq query count returns zero如果 linq 查询计数返回零,则返回值 1
【发布时间】:2020-06-04 00:10:22
【问题描述】:

寻找编写以下查询的替代方法。

this.MaxExpoConsultTypes = expos.Any() ? expos.Max(e => 
  Math.Max(e.ExpComments
    .Where(c => c.CMT_CNSLT_TYP_CD != null && c.CMT_CNSLT_TYP_CD.Trim() != "" && c.CMT_CNSLT_TYP_CD.Trim() != "?")
    .GroupBy(c => c.CMT_CNSLT_TYP_CD)
    .Count(),1)) : 0;

Math.Max 函数不起作用,因为 expos 是一个 IQueryable 并且 SQL 将无法翻译它,但它可以显示我希望结果如何返回。

如果查询返回的计数为零,我想将其重置为 1。

我怎样才能做到这一点?

【问题讨论】:

  • "显然Math.Max 函数不起作用" 为什么?您是否试图完成与“如果计数为 0 返回 1 否则返回计数”不同的事情?
  • 仅供参考,c.CMT_CNSLT_TYP_CD != null && c.CMT_CNSLT_TYP_CD.Trim() != "" 可以替换为 !string.IsNullOrWhiteSpace(c.c.CMT_CNSLT_TYP_CD);
  • 正如@V0ldek 所说,目前还不清楚您在问什么Max(count,1) 确实似乎正在返回您所描述的内容...除非您正在寻找count ==1 ? 1:0...请edit 问题澄清一下,理想情况下使用简单的代码和输入/输出的确切示例 - 使用 List<int> 应该足以证明您正在寻找什么并且设置起来会更简单......
  • var bob = LINQ; if (bob == 0) bob = 1;
  • 我相信 OP 是在谈论 expos.Max(e => Math.Max(...)) 将无法转换为 SQL 的事实,如果 expos 是针对 EF 或其他东西的 IQueryable。如果在问题中更明确,那将是有帮助的。

标签: c# linq


【解决方案1】:

Any() 解决了您的问题

this.MaxExpoConsultTypes = expos.Any() ? e.ExpComments
    .Where(c => c.CMT_CNSLT_TYP_CD != null && c.CMT_CNSLT_TYP_CD.Trim() != "" && c.CMT_CNSLT_TYP_CD.Trim() != "?")
    .GroupBy(c => c.CMT_CNSLT_TYP_CD)
    .Count() : 1;

【讨论】:

    【解决方案2】:

    对您的问题的直接回答可能是将您的查询用作子查询,然后执行将所有 0 变为 1 的投影。

    但是,使查询更复杂以针对数据库执行没有任何好处。从语义上讲,您试图找到满足谓词的 cmets 数量最多的 expo,但您没有将 cmets 视为 1 而不是 0。这将影响最终结果的唯一方法是,如果对于所有expos,您的计数为零(因为您在所有Max 上)。因此,您可以简单地这样做:

    if (!expos.Any())
    {
        this.MaxExpoConsultTypes = 0;
    }
    else
    {
        var maxCount = expos.Max(e => 
          e.ExpComments
            .Where(c => c.CMT_CNSLT_TYP_CD != null && c.CMT_CNSLT_TYP_CD.Trim() != "" && c.CMT_CNSLT_TYP_CD.Trim() != "?")
            .GroupBy(c => c.CMT_CNSLT_TYP_CD)
            .Count());
        this.MaxExpoConsultTypes = maxCount != 0 ? maxCount : 1;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2016-09-14
      • 1970-01-01
      相关资源
      最近更新 更多