Динамический LINQ на IEnumerable? - PullRequest
15 голосов
/ 28 января 2009

Скажите, что мне нужно отфильтровать общий список с помощью динамического запроса (List<string> l; var x = l.Where(*dynamic query*))

Как бы я это сделал, используя LINQ? (В настоящее время используется фильтр строк для просмотра данных)

Я видел сообщение Скотта g : но оно не работает с объектами, которые используют IEnumerable (включая общие списки)

Может кто-нибудь предложить какие-нибудь идеи?

Ответы [ 2 ]

15 голосов
/ 28 января 2009

Предполагая, что вы имеете в виду запрос на основе строки: динамическая библиотека LINQ будет работать нормально; просто позвоните .AsQueryable() сначала:

string s = *dynamic query*
var qry = l.AsQueryable().Where(s);

Это дает вам IQueryable<T> оболочку для вашего списка, которая обеспечивает доступ к динамическим методам расширения LINQ.

3 голосов
/ 28 января 2009

Вы можете использовать метод FindAll (), который принимает предикат. Вот базовый пример.

List<string> stringList = new List<string>(new string[]{"Smith", "Johnson", "Jordan","Doe"});

List<string> filteredStringList = stringList.FindAll(x => x == "Smith");

Также метод Find возвращает один элемент.

Существует также пример проекта на MSDN для выполнения динамических запросов LINQ как в IEnumerable, так и в IQueryable. Вы можете использовать класс DynamicQueryable из него. Вот ссылка . Проект находится внутри проекта C # samples.

...