我正在尝试构建一个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步骤。如果可能的话,我试图将所有这些放到一个陈述中。我一直在玩“包含”功能,但无法完全正常工作。
答案 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));