Как я могу сделать OrderBy с динамическим строковым параметром?

Я хочу сделать это:

var orderBy = "Nome, Cognome desc";

var timb = time.Timbratures.Include("Anagrafica_Dipendente")
    .Where(p => p.CodDipendente == 1);

if(orderBy != "")
    timb = timb.OrderBy(orderBy);

Есть ли OrderBy перегрузка, доступная, который принимает строковый параметр?

52
задан user247702 4 March 2014 в 23:12
поделиться

3 ответа

Совершенно верно. Вы можете использовать библиотеку динамических запросов LINQ, найденную в блоге Скотта Гатри . Также доступна обновленная версия на CodePlex .

Он позволяет создавать предложения OrderBy , предложения Where и почти все остальное, передавая строковые параметры. Он отлично подходит для создания общего кода для сортировки / фильтрации сеток и т. Д.

var result = data
    .Where(/* ... */)
    .Select(/* ... */)
    .OrderBy("Foo asc");

var query = DbContext.Data
    .Where(/* ... */)
    .Select(/* ... */)
    .OrderBy("Foo ascending");
41
ответ дан 7 November 2019 в 09:01
поделиться

Посмотрите этот блог здесь . Он описывает способ сделать это путем определения 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");
6
ответ дан 7 November 2019 в 09:01
поделиться

Вам нужно использовать библиотеку запросов LINQ Dynamic, чтобы передавать параметры во время выполнения,

Это позволит использовать такие операторы linq, как

string orderedBy = "Description";
var query = (from p in products
            orderby(orderedBy)
            select p);
4
ответ дан 7 November 2019 в 09:01
поделиться
Другие вопросы по тегам:

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