лучший способ построить динамические запросы linq в c #? - PullRequest
3 голосов
/ 28 ноября 2011

Я хочу знать, каков наилучший способ построения динамических запросов в LINQ.Запросы будут сложными и вложенными.При поиске я нашел несколько способов:

  1. Linq dynamic (System.Linq.Dynamic)
  2. Класс построителя предикатов Albahari
  3. Linq.Expression

Вариантов может быть больше, чем эти.Какой самый лучший способ?

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Это зависит от ваших обстоятельств: как быстро вам это нужно, какова ваша отправная точка и так далее.В непринужденном мире, я думаю, лучше всего создать собственную библиотеку для построения динамических запросов.Вы можете использовать работу Скотта или Джозефа как источник вдохновения, но, в конце концов, все это «дна» в библиотеке Linq.Expression.

Одним из преимуществ подхода «сделай сам» является то, что вам не нужномост от вашего кода к чьей-то структуре.Скорее, вы будете писать код непосредственно на .NET API.Это может быть полезно, когда у вас уже есть представление ваших динамических запросов, например, в модели, которую вы представляете пользователям через пользовательский интерфейс, в файле XML и т. Д. Все, что вам нужно, - это рекурсивно выполнить это представление и создать System.Linq. Выражение как возвращение.

FWIW, моя компания приняла этот подход, когда вышел .NET 3.5, и мы очень довольны результатом.

0 голосов
/ 28 ноября 2011

Запросы Linq могут быть написаны двумя способами и позволяют использовать любые виды вложений.

Синтаксис запроса

IEnumerable<int> numQuery1 = 
        from num in numbers
        where num % 2 == 0
        orderby num
        select num;

Синтаксис метода

 IEnumerable<int> numQuery2 = numbers.Where(num => num % 2 == 0).OrderBy(n => n);

Для получения дополнительной информации о Linq вы можете посетить LINQ от Microsoft (Language-Integrated Query) . Он содержит все, от начала до примеров учебников

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...