我有一个映射到我的数据库的实体,可以使用以下代码查询列表:
Dim Teams As New List(Of Team)
Teams = (From t In sdContext.Teams _
Order By t.Name _
Select t).ToList()
我想要做的是参数化此查询的排序结果。有时用户会根据名称对其进行排序,有时基于描述,有时基于电子邮件地址。
我认为我无法正确设置EF查询来对结果进行排序,因此我希望在列表中对结果进行排序。我怎样才能做到这一点? EF是否已经具备IComparer或Predicate功能?
答案 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
更复杂。