У меня есть набор строк. Я должен найти из этого набора строки, который удовлетворяет некоторое условие, например, та строка содержит 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
Если вы хотите сделать это самостоятельно, начните здесь: Динамические предикаты: http://msdn.microsoft.com/en-us/library/bb513731.aspx Деревья динамических выражений: http://msdn.microsoft.com/en-us/library/bb882637.aspx
Я думаю, что это больше, чем вы хотели, и настоятельно рекомендую использовать некоторую (легкую) готовую и протестированную библиотеку, которая выполняет преобразование из пользовательских строк в запросы времени выполнения за вас.
Хотя вы не хотите использовать внешние библиотеки, есть одна, которая просто фантастична, и это PredicateBuilder. PredicateBuilder позволяет вам создать набор предикатов для сопоставления элементов, например:
var predicate = PredicateBuilder.True<string>();
predicate = predicate
.And(p => p.Contains("a"))
.And(p => p.Contains("b"));
var matches = items.Where(predicate);
(источник: scottgu.com)
Вам нужно что-то подобное? Используйте библиотеку динамических запросов Linq (загрузка включает примеры).
Посмотрите блог ScottGu для других примеров.