2
如何根据客户端提供的值动态排序实体框架查询?LINQ to Entities根据客户端输入排序表达式
我有2个用户输入:一个是通过过滤项目的值,另一个是按日期,状态,优先级或类型排序结果的方式。
数据显示在网格中。
我有一个这样的查询:
Expression<Func<Issue, object>> sortExpression = IssuesConversionsFilter.Convert(sortBy);
Requests = query.Where(i => i.Project.ProjectID == projectId && i.Project.Enabled)
.OrderByDescending(sortExpression)
.Skip((currentPage - 1)*take)
.Take(take)
IssuesConversionFilter是通过枚举和一个值键入一个缓存的静态类,它是一个Expression<Func<Issue, object>>
:
internal static class IssuesConversionsFilter
{
readonly static IDictionary<IssuesSortBy, Expression<Func<Issue, object>>> Cache = new Dictionary<IssuesSortBy, Expression<Func<Issue, object>>>();
static IssuesConversionsFilter() {
Cache.Add(IssuesSortBy.Date, i => i.CreatedDate);
Cache.Add(IssuesSortBy.Priority, i => i.Priority);
Cache.Add(IssuesSortBy.Type, i => i.Type);
Cache.Add(IssuesSortBy.State, i => i.State);
}
public static Expression<Func<Issue, object>> Convert(IssuesSortBy sortBy) {
if(Cache.ContainsKey(sortBy) == false)
throw new InvalidOperationException();
return Cache[sortBy];
}
}
的问题是,返回类型必须是一个返回object
的表达式,而LINQ to Entities似乎只支持原始类型。使用LING-to-Objects可以很好地工作。
我该如何得到这个工作?
这是一个典型的情况。有人可以指导我一个正确的解决方案? – anotherNeo