如何从EF查询中对结果列表进行排序?

时间:2011-04-07 15:51:04

标签: 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查询来对结果进行排序,因此我希望在列表中对结果进行排序。我怎样才能做到这一点? EF是否已经具备IComparer或Predicate功能?

3 个答案:

答案 0 :(得分:1)

看起来类似的问题被here提到msdn article

ObjectQuery<Teams> teamsQuery = db.Teams.OrderBy("it.Name");
List<Teams> teams = teamsQuery.ToList();

答案 1 :(得分:0)

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

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

或者从原始语句中获取输出,然后按顺序排列您创建的列表。

答案 2 :(得分:0)

您可以在数据库中进行排序。我会创建一个类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更复杂。