Формирование списка Expression'ов.
От: UberPsychoSvin  
Дата: 06.11.14 10:00
Оценка:
Суть в чём. Есть некий метод с интересной сигнатурой.
public static IQueryable<TSource> Include<TSource>(this IQueryable<TSource> clientObjects,
params Expression<Func<TSource, object>>[] retrievals) where TSource : ClientObject;


Вызов выглядит примерно вот так :
es.Include(e=>e.Id, e.DisplayName);//плюс ещё тыща пицот параметров.

Здесь мы строим выражение, в котором указываем какие проперти должны загрузиться.

Но что если у нас в зависимости от некоторых условий некоторые параметры могут то фигурировать, то не фигурировать в запросе? Хорошо если такой параметр один, можно просто продублировать запрос, а если их 10?

В .NET 4.5 можно сделать такую штуковину.
//создать список
var includeL = new List<Expression<Func<ListItem, object>>>()
{
    e => e.Id,
    e => e.DisplayName,
}
//в зависимости от условий набить его нужным содержанием.
var includeA = includeL.ToArray();//Сконвертить его в массивчик
es.Include(includeA);//И подсовывать его
//И всё прокатывает.


А в .NET 3.5 такой подход уже не прокатывает и вываливается обломное исключение
InvalidQueryExpressionException : "The query expression is not supported."

Где тут спрятана магия?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.