Построить динамическое LINQ для Sql лямбда-выражения - PullRequest
4 голосов
/ 14 апреля 2011

В настоящее время я ищу способ создания лямбда-выражения для моего запроса 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".

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

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

Спасибо.

1 Ответ

2 голосов
/ 14 апреля 2011

Вы можете создавать новые выражения 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();

...