Рассмотрите возможность реализации этих методов расширения с именем WhereIf
.
Вы передаете ему два параметра: оператор, вычисляемый в логическое значение, и лямбда-функцию.Если оператор bool оценивается как true, добавляется лямбда.
WhereIf на ExtensionMethod.net
Ваш запрос может выглядеть следующим образом:
return getproductinfo.tblWeights
.Where(w=> w.MemberId == memberid &&
w.LocationId == locationid)
.WhereIf(!string.IsNullOrEmpty(basematerial), w=>w.BaseMaterialName == basematerial)
.WhereIf(!string.IsNullOrEmpty(source), w=>w.WeightStatus == source)
.ToList();
Вот они, для IEnumerable
и IQueryable
.Это позволяет вам использовать .WhereIf()
в LINQ To SQL, Entity Framework, Lists, Arrays и всем, что реализует эти 2 интерфейса.
public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
public static IEnumerable<TSource> WhereIf<TSource>(this IEnumerable<TSource> source, bool condition, Func<TSource, int, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Func<TSource, int, bool> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}