WhereIf
не очень подходит для вашего случая по двум причинам:
- Вы вызываете две разные функции на вашем
if-else
, в то время как WhereIf
создан для принятия одиночная функция (predicate
), которая будет выполнена, если удовлетворено некоторое значение condition
. WhereIf
- это метод расширения для IEnumerable<TSource>
, в то время как вы пытаетесь использовать его как метод расширения для IQueryable<TSource>
.
Если вы настаиваете, вы ' Нам нужно определить метод расширения для IQueryable<TSource>
, и при этом просто определить его как WhereIfElse
:
public static class ExtensionMethods
{
public static IQueryable<TSource> WhereIfElse<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, bool> predicateIf, Func<TSource, bool> predicateElse)
{
if (condition)
return source.Where(predicateIf).AsQueryable();
else
return source.Where(predicateElse).AsQueryable();
}
}
Итак, предположим, что тип query
равен IQueryable<Item>
( замените Item
на ваш фактический тип):
public async Task<List<Item>> LoadQuery(IEnumerable<string> codes)
{
var query = _dBContext.QueryTable.Where(x => !x.InActive).AsQueryable();
query = query.WhereIfElse(
// condition
codes != null && codes.Any(),
// predicateIf
(Item x) => codes.Contains(x.FirstCode) || codes.Contains(x.SecondCode),
// predicateElse
(Item x) => !x.HasException.HasValue
);
var data = query.ToList();
return data;
}
PS примечание. Я изменил ваше возвращаемое значение, хотя await
.
по-прежнему нет.