Проблема сортировки MVCGrid.Net - направление сортировки
Я пытаюсь настроить сетку с помощью MVCGrid.Net, но мой код с помощью сортировки дает мне ошибку с параметром options.sortdirection.
public static void RegisterGrids()
{
MVCGridDefinitionTable.Add("CustomerGrid", new MVCGridBuilder<Customer>()
.WithAuthorizationType(AuthorizationType.AllowAnonymous)
.AddColumns(cols =>
{
cols.Add("Id").WithSorting(false).WithValueExpression(p => p.CustomersID.ToString());
cols.Add("FirstName").WithHeaderText("First Name")
.WithValueExpression(p => p.Name);
cols.Add("Company").WithHeaderText("Company")
.WithValueExpression(p => p.Company);
})
.WithSorting(true, "FirstName")
.WithRetrieveDataMethod((context) =>
{
var options = context.QueryOptions;
var result = new QueryResult<Customer>();
using (var db = new Entities())
{
var query = db.Customers.ToList();
if (!String.IsNullOrWhiteSpace(options.SortColumnName))
{
switch (options.SortColumnName.ToLower())
{
case "name":
query = query.OrderBy(c=>c.Company, options.SortDirection);
break;
}
}
result.Items = query;
}
return result;
})
);
}
Ошибка в запросе в выписке. Пожалуйста, помогите, если это возможно. Ошибка Visual Studio дает:
Ошибка 1 "System.Collections.Generic.List" не содержит определения для "OrderBy" и наилучшей перегрузки метода расширения "System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable, System.Func, System.Collections).Generic.IComparer)'содержит недопустимые аргументы C:\MVC Tests\MVCGrida\MVCGrida\App_Start\MVCGridConfig.cs 39 46 MVCGrida
1 ответ
У меня тоже была такая же проблема. Я не уверен, что пример Entity Framework в учебнике возвращает вещи иначе, чем стандартный IEnumerable, или это просто ошибка в учебнике. В любом случае мне пришлось вручную обойти сортировку в моем случае. Не самая красивая в мире, но это работает.
Например:
switch (options.SortColumnName.ToLower())
{
case "name":
if (options.SortDirection == SortDirection.Asc)
query = query.OrderBy(c=>c.Company);
else if (options.SortDirection == SortDirection.Dsc)
query = query.OrderByDescending(c=>c.Company);
break;
}
Надеюсь это поможет.
Я создал метод расширения, соответствующий тому, что указано в документации.
private static IEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector, SortDirection sort)
{
switch (sort)
{
case SortDirection.Asc:
return source.OrderBy(keySelector);
case SortDirection.Dsc:
return source.OrderByDescending(keySelector);
case SortDirection.Unspecified:
default:
return source;
}
}
Я использую это так
eList.OrderBy(x => x.Field, options.SortDirection);