Как отсортировать полученный список из запроса EF? - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть объект, сопоставленный с моей базой данных, и я могу получить запрос к списку, используя следующий код:

Dim Teams As New List(Of Team)

Teams = (From t In sdContext.Teams _
         Order By t.Name _
         Select t).ToList()

Что я хотел бы сделать, это параметризовать результаты сортировки по этому запросу,Иногда пользователь сортирует его по имени, иногда по описанию, иногда по адресу электронной почты.

Не думаю, что смогу правильно настроить запрос EF для сортировки результатов,поэтому я хочу отсортировать результаты в списке.Как я могу это сделать?EF уже имеет функции IComparer или Predicate?

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

похоже, что подобный вопрос был задан здесь со ссылкой на эту статью MSDN

ObjectQuery<Teams> teamsQuery = db.Teams.OrderBy("it.Name");
List<Teams> teams = teamsQuery.ToList();
0 голосов
/ 07 апреля 2011

Вы можете сделать свой род в БД.Я бы создал класс OrderSortCriteria

public class OrderSortDefinition{
    public bool ByName { get; set;}
    public bool ByEmail { get; set; }
    public bool ByDescription { get; set; }
}

Я бы использовал это при построении моего запроса для добавления соответствующего вида.

public IList<Team> GetSortedTeams(OrderSortDefinition sortOrder){    
    var teams = from t in sdContext.Teams
                select t;
    if(sortOrder.ByEmail){
        return teams.OrderBy(t=>t.Email).ToList();
    }

    // repeat for each field.
}

Вы можете сделать ваш OrderSortDefinition более сложным, есливам нужно поддерживать сортировку по нескольким полям.

0 голосов
/ 07 апреля 2011

Вы можете заказать, используя предикат, переданный в метод OrderBy LINQ:

var list = sdContext.Teams.OrderBy(t => t.Name).ToList()

Или возьмите вывод из вашего исходного утверждения и просто упорядочите созданный вами Список.

...