C # Linq в расширении / метод - PullRequest
2 голосов
/ 13 апреля 2011

Привет

Я ищу способ расширения, включающий запрос linq. То, что я ищу, это метод или метод расширения, который может сделать что-то вроде этого

var orderedList = OrderThisList<ModelName>(List<T> sourceList, //and something like m=>m.Username); 

Где ModelName - это сущность, а Username - это поле, которое я хочу заказать. Метод будет выглядеть примерно так:

public List<T> OrderThisList<T>(//some linq property?)
{
    //What code goes here?
}

Ответы [ 2 ]

3 голосов
/ 13 апреля 2011

РЕДАКТИРОВАТЬ: до сих пор неясно, что это за вопрос, но похоже, что мы имеем дело с коллекциями в памяти, а не с LINQ to SQL и т. Д.

Если проблема с использованием OrderBy заключается в том, что он не сортирует список на месте, вы должны использовать List<T>.Sort(), возможно передавая пользовательский компаратор.

Мой MiscUtil проект имеет несколько типов помощников, которые могут вам помочь. Например:

var comparison = ProjectionComparer<ModelType>.Create(m => m.SomeProperty)
                                              .ThenBy(m => m.SomeOtherProperty);
list.Sort(comparison);

Если вы используете LINQ to SQL и у вас есть контекст данных , вы можете использовать:

public List<TSource, TKey> OrderThisList<TSource, TKey>(
    Expression<Func<TSource, TKey>> ordering)
{
    return dataContext.GetTable<TSource>()
                      .OrderBy(ordering)
                      .ToList();
}

Теперь очевидно, что требуется два аргумента типа , и вы хотите указать только один. Есть несколько способов обойти это - в основном вы хотите получить универсальный тип и метод с одним аргументом типа (TKey), который может быть выведен. Например:

var list = Orderer<ModelType>.Create(dataContext)
                             .OrderThisList(m => m.SomeProperty);

Это несколько обходно, хотя, учитывая, что OrderBy уже доступен ... не могли бы вы объяснить, почему вы этого хотите, а также какой поставщик LINQ участвует?

2 голосов
/ 13 апреля 2011

Вы должны использовать встроенный метод Linq var orderedList = myList.OrderBy(x => x.Username) Вам не нужно писать собственный метод расширения для сортировки списка.

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