代码之家  ›  专栏  ›  技术社区  ›  Hank

如果linq查询计数返回零,则返回值1

  •  0
  • Hank  · 技术社区  · 6 年前

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

    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;
    

    数学。Max函数将不起作用,因为expos是一个IQueryable,SQL将无法翻译它,但它是用来显示我希望结果如何返回的。

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

    我怎样才能做到这一点?

    0 回复  |  直到 6 年前
        1
  •  2
  •   Tan Sang    6 年前

    任何()都解决了你的问题

    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
  •  1
  •   V0ldek    6 年前

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

    然而,让查询对数据库执行起来更加复杂并没有什么好处。从语义上讲,你是在试图找到 expo 满足谓词的注释数最多,但不将任何注释视为一而不是零。这将影响最终结果的唯一方式是如果 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;
    }