LINQ 查询是否有条件外部参数

Rob*_*one 4 c# t-sql linq sql-server asp.net-core

我正在尝试使用 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();
}
Run Code Online (Sandbox Code Playgroud)

取决于 boolparameter,我做一个查询或另一个。有没有办法使用带有条件的单个查询?就像是:

var listCE = _context.Ce
                     .Where(x => x.VuId == element.VuId)
                     .Where(x => boolparameter ? x.Score == 8 : true)
                     .AsNoTracking()
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

C# Asp.NetCore SqlServer 2019 非常感谢!

小智 5

如果有效,您可以尝试以下代码:

var listCE = _context.Ce
  .Where(x => x.VuId == element.VuId)
  .Where(x => !boolparameter || x.Score == 8)
  .AsNoTracking()
  .ToList();
Run Code Online (Sandbox Code Playgroud)

这意味着如果boolparameterfalse,x.Score 无关紧要,因为!false将等于true并且它满足 OR 条件。同样,如果boolparametertrue,那么x.score也将检查它是否等于 8。

或者也许有一个 Where 条件:

var listCE = _context.Ce
  .Where(x => x.VuId == element.VuId && (!boolparameter || x.Score == 8))
  .AsNoTracking()
  .ToList();
Run Code Online (Sandbox Code Playgroud)