Я хочу сделать это:
var orderBy = "Nome, Cognome desc";
var timb = time.Timbratures.Include("Anagrafica_Dipendente")
.Where(p => p.CodDipendente == 1);
if(orderBy != "")
timb = timb.OrderBy(orderBy);
Есть ли OrderBy
перегрузка, доступная, который принимает строковый параметр?
Совершенно верно. Вы можете использовать библиотеку динамических запросов LINQ, найденную в блоге Скотта Гатри . Также доступна обновленная версия на CodePlex .
Он позволяет создавать предложения OrderBy
, предложения Where
и почти все остальное, передавая строковые параметры. Он отлично подходит для создания общего кода для сортировки / фильтрации сеток и т. Д.
var result = data
.Where(/* ... */)
.Select(/* ... */)
.OrderBy("Foo asc");
var query = DbContext.Data
.Where(/* ... */)
.Select(/* ... */)
.OrderBy("Foo ascending");
Посмотрите этот блог здесь . Он описывает способ сделать это путем определения EntitySorter
.
Он позволяет передавать IEntitySorter
в методы службы и использовать его следующим образом:
public static Person[] GetAllPersons(IEntitySorter<Person> sorter)
{
using (var db = ContextFactory.CreateContext())
{
IOrderedQueryable<Person> sortedList = sorter.Sort(db.Persons);
return sortedList.ToArray();
}
}
И вы можете создать EntitiySorter
следующим образом:
IEntitySorter<Person> sorter = EntitySorter<Person>
.OrderBy(p => p.Name)
.ThenByDescending(p => p.Id);
Или вот так:
var sorter = EntitySorter<Person>
.OrderByDescending("Address.City")
.ThenBy("Id");
Вам нужно использовать библиотеку запросов LINQ Dynamic, чтобы передавать параметры во время выполнения,
Это позволит использовать такие операторы linq, как
string orderedBy = "Description";
var query = (from p in products
orderby(orderedBy)
select p);