хотите запрос, чтобы сделать порядок по переменной в запросе Linq - PullRequest
5 голосов
/ 20 июня 2010

Как сделать заказ по переменной Column, потому что у меня есть выпадающий список на странице, и я хочу показать сетку в соответствии с порядком сортировки, выбранным в этом выпадающем меню, например, Цена, Код, рейтинг, описание и т. Д., И я не хочу писать отдельный запрос для каждого столбца.

from lm in lDc.tbl_Products
where lm.TypeRef == pTypeId
 orderby lm.Code ascending
 select new; 

Ответы [ 3 ]

6 голосов
/ 20 июня 2010

Если вы хотите выполнить сортировку с помощью SQL, вам нужно будет передать столбец / тип сортировки. Запрос откладывается до тех пор, пока вы на самом деле не сделаете выбор, поэтому вы можете построить запрос поэтапно и по окончании выполнить его следующим образом:

// Do you query first.  This will NOT execute in SQL yet.
var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId);

// Now add on the sort that you require... you could do ascending, descending,
// different cols etc..
switch (sortColumn)
{
    case "Price":
        query = query.OrderBy(q => q.Price);
        break;
    case "Code":
        query = query.OrderBy(q => q.Code);
        break;
    // etc...
}

// Now execute the query to get a result
var result = query.ToList();

Если вы хотите сделать это вне SQL, то просто получите базовый результат без сортировки, а затем примените OrderBy к базе результатов по необходимым критериям сортировки.

3 голосов
/ 20 июня 2010
    public static IEnumerable<T> OrderByIf<T,TKey>(this IEnumerable<T> source, bool condition, Func<T, TKey> keySelector)
    {
        return (condition) ? source.OrderBy(keySelector).AsEnumerable() : source;
    }

Использование:

            var query = lDC.tbl_Products.Where(p => p.TypeRef == pTypeId)
                                    .OrderByIf(sortColumn == "Price", p => p.Price)
                                    .OrderByIf(sortColumn == "Code", p => p.Code);
0 голосов
/ 20 июня 2010

Вы можете «создать» запрос LINQ за несколько шагов.

Создайте базовый запрос, чтобы получить несортированную информацию.Этот запрос не будет выполнен до тех пор, пока вы не попытаетесь перечислить результаты.

var data = from lm in lDc.tbl_Products
           where lm.TypeRef == pTypeId
           select new;

Затем в обработчике событий примените любую сортировку, какую пожелаете, прежде чем привязывать результаты к таблице.

var orderedData = from lm in data
                  order lm.Code ascending
                  select new;

// TODO: Display orderedData in a grid.

Полный запрос, который вы перечислите, будет оценен.Это означает, что вы можете запустить отдельный запрос для каждого элемента в раскрывающемся списке, построенный из «базового» запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...