powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 4.1 соединение Expression для Where
2 сообщений из 2, страница 1 из 1
EF 4.1 соединение Expression для Where
    #37611971
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
Имеется EF 4.1. Code First(я все таки предпочитаю это называть как Code Only :))
И вот такой простенький код,
где через Extension And соединяем Expression'ы

Код: c#
1.
2.
3.
4.
5.
6.
MyDataContext dc = new MyDataContext();
            Expression<Func<Order, bool>> c1 = x => x.id >= 4;
            Expression<Func<Order, bool>> c2 = x => x.id < 7;
            Expression<Func<Order, bool>> c3 = c1.And(c2); 
            IQueryable<Order> q1 = dc.Order.Where(c3);
            var l1 = q1.ToList();




так вот в последней строке ошибка: The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
Как ее побороть не знаю. А нужно то всего соединять Expression'ы в runtime.
Кто как делает динамические условия для Where, которые создаются в runtime?
Спасибо
Код extension'a для примера
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public static class PredicateBuilder
    {
        public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
                                                             Expression<Func<T, bool>> expr2)
        {
            var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
            return Expression.Lambda<Func<T, bool>>
                  (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
        }
    }
...
Рейтинг: 0 / 0
EF 4.1 соединение Expression для Where
    #37612499
GFX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может кому то будет интересно. Заюзал так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
List<Expression<Func<Order, bool>>> ps = new List<Expression<Func<Order, bool>>>();
            Expression<Func<Order, bool>> c1 = x => x.id >= 4;
            Expression<Func<Order, bool>> c2 = x => x.id < 7;
            Expression<Func<Order, bool>> c3 = x => x.Lines.Count > 2;
            Expression<Func<Order, bool>> c4 = x => x.Customer.Name.Contains("1");
            ps.Add(c1);
            ps.Add(c2);
            ps.Add(c3);
            ps.Add(c4);

            IQueryable<Order> q1 = dc.Order.AndQ<Order>(ps.ToArray());
            var lll = q1.ToList();


Через этот extension:
Код: c#
1.
2.
3.
4.
5.
public static IQueryable<T> AndQ<T>(this IQueryable<T> query, params Expression<Func<T, bool>>[] predicates)
        {
            return predicates
                .Aggregate(query, (result, predicate) => result.Where(predicate));
        }
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 4.1 соединение Expression для Where
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]