Создайте динамическое выражение linq для лямбда-выражения Sql

В настоящее время я ищу способ, с помощью которого я могу построить лямбда-выражение для моего запроса Linq to SQL на основе пользовательского ввода во время выполнения. Я искал в сети, но не могу найти ничего полезного. Если кто-нибудь может показать мне, как это сделать, или есть какие-либо хорошие статьи, пожалуйста, дайте мне знать. Очень признателен!

Пример:

Допустим, у меня есть этот запрос Linq:

var loc = (from l in Entity.Locations
           select l).Where(a => a.LocationId > 5);

Можно ли построить это выражение a => a.LocationId > 5 во время выполнения? В зависимости от того, выбрал ли пользователь LocationId. Если пользователь выбрал Имя, то это будет a => a.Name == "bla".

Я наткнулся на статью Скотта, но я бы предпочел решение, которое позволяет мне создать выражение строгого типа, в котором я могу обнаружить любые возможные ошибки во время компиляции.

Любая информация будет высоко оценена.

Спасибо.


person developer    schedule 14.04.2011    source источник


Ответы (1)


Вы можете создавать новые выражения LINQ, содержащие старые выражения.

var loc = (from l in Entity.Locations select l);

if (hasLocation)
    loc = loc.Where(a => a.LocationId > 5);

if (hasName)
    loc = loc.Where(a => a.Name == "bla");

и т.п.

Выражение оценивается только после того, как вы его используете, например var result = loc.ToList();

person Albin Sunnanbo    schedule 14.04.2011
comment
прохладно. Спасибо. На самом деле я думал о построении дерева выражений, но не знаю, как это сделать. Это подойдет. Спасибо - person developer; 14.04.2011