LINQ 查询条件外部参数
Posted
技术标签:
【中文标题】LINQ 查询条件外部参数【英文标题】:LINQ Query if condition external parameter 【发布时间】:2020-05-07 10:45:06 【问题描述】:我正在尝试使用 LINQ 获取值列表。
我有这样的代码:
var _context = _scope.ServiceProvider.GetRequiredService<VMContext>();
if (boolparameter)
var listCE = _context.Ce
.Where(x => x.VuId == element.VuId)
.Where(x => x.Score == 8)
.AsNoTracking()
.ToList();
else
var listCE = _context.Ce
.Where(x => x.VuId == element.VuId)
.AsNoTracking()
.ToList();
取决于布尔参数,我做一个查询或另一个。有没有办法使用带有条件的单个查询? 比如:
var listCE = _context.Ce
.Where(x => x.VuId == element.VuId)
.Where(x => boolparameter ? x.Score == 8 : true)
.AsNoTracking()
.ToList();
C# Asp.NetCore SqlServer 2019 非常感谢!
【问题讨论】:
其他答案很好,但可能有点难以理解。我发现这更容易理解。(boolparameter && x.Score==8) || !boolparameter
。当然,如果您将其简化,它将变得像给出的答案一样。
【参考方案1】:
这种方式比较冗长,但是如果您有更多(或复杂)的条件,则可以更容易阅读并快速了解影响查询的因素。
在您到达.ToList()
或尝试访问查询结果之前,LINQ 不会执行查询。
这意味着您不需要在 if 和 else 部分中复制完整的查询:
var _context = _scope.ServiceProvider.GetRequiredService<VMContext>();
var listCEQuery = _context.Ce.Where(x => x.VuId == element.VuId)
// LINQ will append this to the initial where clause
if (boolparameter == true)
listCEQuery = listCEQuery.Where(x => x.Score == 8)
var listCE = listCEQuery.AsNoTracking().ToList();
【讨论】:
【参考方案2】:你能在下面检查一下吗?
var listCE = _context.Ce
.Where(x => boolparameter == false ? x.VuId == element.VuId :
(x.VuId == element.VuId &&
x.Score == 8))
.AsNoTracking()
.ToList();
【讨论】:
【参考方案3】:如果可以的话,你可以试试下面的代码:
var listCE = _context.Ce
.Where(x => x.VuId == element.VuId)
.Where(x => !boolparameter || x.Score == 8)
.AsNoTracking()
.ToList();
这意味着如果boolparameter
是false
,x.Score 无关紧要,因为!false
等于true
并且它满足OR 条件。同样,如果boolparameter
是true
,那么x.score
是否等于8 也会被检查。
或者可能有一个 Where 条件:
var listCE = _context.Ce
.Where(x => x.VuId == element.VuId && (!boolparameter || x.Score == 8))
.AsNoTracking()
.ToList();
【讨论】:
【参考方案4】:var listCE = _context.Ce
.Where(x =>
x.VuId == element.VuId
&& (!boolparameter || x.Score == 8))
.AsNoTracking()
.ToList();
这会在检查x.Score
之前检查boolparameter
是否为真。
【讨论】:
以上是关于LINQ 查询条件外部参数的主要内容,如果未能解决你的问题,请参考以下文章