Динамично оценивающие строковые условия в C#

У меня есть набор строк. Я должен найти из этого набора строки, который удовлетворяет некоторое условие, например, та строка содержит A и B или C. Эти критерии указаны пользователем, таким образом, они являются динамичными. В Linq это должно быть что-то как,

List<String> items = new List<string> { "sdsdsd", "sdsd", "abc"};

var query = from item in items
            where  item.Contains("a") && item.Contains("b") || item.Contains("c")                         
            select item;

Я хочу сделать, где условие, динамичное так, чтобы оно могло работать на любой вход пользователем. Действительно ли возможно сделать это в C#, не пользуясь никакой внешней библиотекой. Возможно, с помощью Linq или чего-то еще, что встроено в платформу .NET.

Спасибо, Gary

6
задан gary 6 July 2010 в 12:33
поделиться

3 ответа

Если вы хотите сделать это самостоятельно, начните здесь: Динамические предикаты: http://msdn.microsoft.com/en-us/library/bb513731.aspx Деревья динамических выражений: http://msdn.microsoft.com/en-us/library/bb882637.aspx

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

1
ответ дан 17 December 2019 в 00:02
поделиться

Хотя вы не хотите использовать внешние библиотеки, есть одна, которая просто фантастична, и это PredicateBuilder. PredicateBuilder позволяет вам создать набор предикатов для сопоставления элементов, например:

var predicate = PredicateBuilder.True<string>();
predicate = predicate
    .And(p => p.Contains("a"))
    .And(p => p.Contains("b"));

var matches = items.Where(predicate);
5
ответ дан 17 December 2019 в 00:02
поделиться

alt text
(источник: scottgu.com)

Вам нужно что-то подобное? Используйте библиотеку динамических запросов Linq (загрузка включает примеры).

Посмотрите блог ScottGu для других примеров.

1
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: