C# Entity Framework。简化查询

C# Entity Framework. Simplify query

如何简化对数据库的下一次查询:

public Plan? Get(DateTime now)
{
    return context.Plans
        .Where(x => IsActivePlan(x, now)) // 1 condition

        .Where(x => IsPlolongingPlan(x, now)) // 2 condition
        
        .OrderBy(x => x.StartedAt)
        .FirstOrDefault();
}

我需要的: 如果1个条件后有对象,则执行“OrderBy”和return第一个元素。如果没有对象,则转到2条件,执行“OrderBy”和return“FirstOrDefault”。我不希望对象被两个条件一次拿走。

谢谢

像这样

public Plan? Get(DateTime now)
{
    return context.Plans.Where(x => IsActivePlan(x, now)).OrderBy(x => x.StartedAt).FirstOrDefault()
        ?? context.Plans.Where(x => IsPlolongingPlan(x, now)).OrderBy(x => x.StartedAt).FirstOrDefault();
}

因为您不希望同时满足两个条件,您必须:

return context.Plans
        .Where(x => (IsActivePlan(x, now) && !IsPlolongingPlan(x, now)) ||
                    (!IsActivePlan(x, now) && IsPlolongingPlan(x, now)))            
        .OrderBy(x => x.StartedAt)
        .FirstOrDefault();

你可以先看看有没有

像这样:

            var result = null;
            if (context.Plans.Any(x => IsActivePlan(x, now)))
            {
                result = context.Plans.Where(x => IsActivePlan(x, now))
                    .OrderBy(x => x.StartedAt)
                    .FirstOrDefault();
            }
            else
            {
                result = context.Plans.Where(x => IsPlolongingPlan(x, now))
                    .OrderBy(x => x.StartedAt)
                    .FirstOrDefault();
            }