Я думаю, что есть несколько подходов, которые вы можете использовать.
Во-первых, вы можете взглянуть на Динамическую библиотеку LINQ (а также посмотреть обновление Дэвида Фаулера здесь).Используя этот подход, вы можете написать свои запросы LINQ следующим образом:
var results = Context.Clients
.Where("city=='Los Angeles'")
.OrderBy("address");
Таким образом, ваши предикаты Where
и OrderBy
являются строками, которые преобразуются в выражения под капотом.
Second, вы можете использовать библиотеку, такую как PredicateBuilder , если вы знаете, к чему обращаетесь, но не уверены, будете ли вы запрашивать одно или несколько полей, например:
var predicate = PredicateBuilder.True<Clients>();
foreach(var criteria in searchCriteria) {
if (criteria.Key=="city"){
predicate = predicate.And(c => c.city==criteria.Value);
} else if (criteria.Key=="address"){
predicate = predicate.And(c => c.address==criteria.Value);
}
}
var results = Context.Clients.Where(predicate);
В-третьих,и, вероятно, самое сложное, это создать свое собственное дерево выражений.Это определенно требует большей части кода (и сначала он немного глубокий), но он очень, очень мощный.Этот пример от MSDN дает хороший обзор того, что вы можете сделать (и, вероятно, делает это немного более кратко, чем я мог бы сделать здесь).
Итак, в основном, у вас естьВам доступно несколько вариантов.Библиотека Dynamic LINQ кажется самой простой в использовании, но я никогда не использовал ее, поэтому я не могу точно сказать, насколько она работает и насколько она надежна.Есть также пакет NuGet для библиотеки Dynamic LINQ, если это поможет.
Удачи.Надеюсь, это поможет!