List 如何对EF查询的结果列表进行排序?

List 如何对EF查询的结果列表进行排序?,list,sorting,entity-framework-4,List,Sorting,Entity Framework 4,我有一个映射到数据库的实体,可以使用以下代码查询列表: Dim Teams As New List(Of Team) Teams = (From t In sdContext.Teams _ Order By t.Name _ Select t).ToList() 我想做的是参数化这个查询的排序结果。有时用户会根据名称、有时根据描述、有时根据电子邮件地址对其进行排序 我认为我无法正确设置EF查询来对结果进行排序,因此我希望对列表中的结果进行排序。我该怎么做

我有一个映射到数据库的实体,可以使用以下代码查询列表:

Dim Teams As New List(Of Team)

Teams = (From t In sdContext.Teams _
         Order By t.Name _
         Select t).ToList()
我想做的是参数化这个查询的排序结果。有时用户会根据名称、有时根据描述、有时根据电子邮件地址对其进行排序


我认为我无法正确设置EF查询来对结果进行排序,因此我希望对列表中的结果进行排序。我该怎么做?EF是否已准备好IComparer或谓词函数?

您可以使用传递到OrderBy LINQ方法的谓词进行排序:

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

或者从原始语句中获取输出,然后对创建的列表进行排序。

您可以在数据库中进行排序。我将创建一个类
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.
}
公共IList GetSortedTeam(OrderSortDefinition sortOrder){
var teams=来自sdContext.teams中的t
选择t;
如果(通过电子邮件排序){
return teams.OrderBy(t=>t.Email).ToList();
}
//对每个字段重复此操作。
}

如果需要支持对多个字段进行排序,则可以使您的
OrderSortDefinition
更加复杂。

似乎有人提出了类似的问题

ObjectQuery teamsQuery=db.Teams.OrderBy(“it.Name”);
List teams=teamsQuery.ToList();

如果我想将t.Name作为传入的参数,相同的语法是否有效?我不这么认为。t.Name在编译时是已知的,因为它可以推断上下文。您可以使用switch语句来确定按哪个属性排序。这就成功了!我最初的尝试并没有正确地从上下文中提取ObjectQuery,但是使用上面的代码允许我这样做。谢谢
ObjectQuery<Teams> teamsQuery = db.Teams.OrderBy("it.Name");
List<Teams> teams = teamsQuery.ToList();