LINQ条件Where子句包括多个条件

时间:2018-07-23 16:42:35

标签: c# linq if-statement

我正在尝试构建一个LINQ语句,该语句在where子句中说明了两个不同的条件,而我在这里没有找到针对我要执行的操作的解决方案。

我有一个尝试查询的过程步骤列表:

stepsQuery = _context.ProcessSteps
    .Where(a.StepType == Constants.ProcessStepTypes.Standard)

if (includeA)
    stepsQuery = stepsQuery.Where(u => u.StepType == Constants.ProcessStepTypes.A);

if (includeB)
    stepsQuery = stepsQuery.Where(u => u.StepType == Constants.ProcessStepTypes.B);

我传入了两个变量,包括includeA和includeB。我需要所有标准步骤,如果includeA为true,还需要A步骤,如果includeB为true,还需要B步骤。如果可能的话,我试图将所有这些放到一个陈述中。我一直在玩“包含”功能,但无法完全正常工作。

2 个答案:

答案 0 :(得分:4)

您可以简单地将stepsQuery写为

_context.ProcessSteps.Where(a => a.StepType == Constants.ProcessStepTypes.Standard ||
    includeA && a.StepType == Constants.ProcessStepTypes.A ||
    includeB && a.StepType == Constants.ProcessStepTypes.B)

答案 1 :(得分:1)

您可以使用Contains来实现:

stepsQuery = .AsQueryable();

var stepTypes = new List<string>();
stepTypes.Add(Constants.ProcessStepTypes.Standard);
if (includeA)
    stepTypes.Add(Constants.ProcessStepTypes.A);
if (includeB)
    stepTypes.Add(Constants.ProcessStepTypes.B);

var stepsQuery = _context.ProcessSteps.Where(u => stepTypes.Contains(u.StepType));