【发布时间】: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。如果在问题中更明确,那将是有帮助的。