C# 如何生成表达式<;Func<;T、 TPaginatedKey>&燃气轮机;基于字符串的表达式?
我正在实现中的Pro Asp.Net Web Api Http Web服务中描述的通用实体存储库 Asp.Net Tugberk Ugurlu等人 分页函数如下所示。请关注第三个参数“KeySelect”C# 如何生成表达式<;Func<;T、 TPaginatedKey>&燃气轮机;基于字符串的表达式?,c#,linq,linq-expressions,C#,Linq,Linq Expressions,我正在实现中的Pro Asp.Net Web Api Http Web服务中描述的通用实体存储库 Asp.Net Tugberk Ugurlu等人 分页函数如下所示。请关注第三个参数“KeySelect” public PaginatedList<T> Paginate<TPaginatedKey>(int pageIndex, int pageSize, Expression<Func<T, TPaginatedKey>> keySelector
public PaginatedList<T> Paginate<TPaginatedKey>(int pageIndex, int pageSize, Expression<Func<T, TPaginatedKey>> keySelector,
Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includeProperties)
{
m_EntitiesContext.Set<T>().OrderBy(keySelector);
... // Removed some code here.
}
public paginedlist Paginate(int pageIndex、int pageSize、Expression keySelector、,
表达式谓词,参数表达式[]includeProperties)
{
m_EntitiesContext.Set().OrderBy(keySelector);
…//此处删除了一些代码。
}
下面调用上述方法
m_Repository.Paginate<short>(cmd.Page, cmd.Take, x => x.Id, null);
m_Repository.Paginate(cmd.Page,cmd.Take,x=>x.Id,null);
所以这里第三个参数
keySelector
的参数是x=>x.Id
。正如您所期望的,它是按Id排序的,并且是硬编码为Id的。现在我想进行概括,以便在运行时能够根据Id、ModifiedDate、FirstName或任何基于字符串参数(如“Id”或“ModifiedDate”或“FirstName”)的参数进行排序。有人能告诉我如何根据字符串生成或创建表达式
表达式吗?我想它应该足够简单,但我无法做到。我相信您正在寻找的是一种叫做的东西,它允许您构建动态表达式
从链接的示例中可以看出,这是他们如何通过
MethodCallExpression orderByCallExpression = Expression.Call(
typeof(Queryable),
"OrderBy",
new Type[] { queryableData.ElementType, queryableData.ElementType },
whereCallExpression,
Expression.Lambda<Func<string, string>>(pe, new ParameterExpression[] { pe }));
// Create an executable query from the expression tree.
IQueryable<string> results = queryableData.Provider.CreateQuery<string>(orderByCallExpression);
MethodCallExpression orderByCallExpression=Expression.Call(
类型(可查询),
“订购人”,
新类型[]{queryableData.ElementType,queryableData.ElementType},
其中称为表达式,
Lambda(pe,新参数表达式[]{pe});
//从表达式树创建可执行查询。
IQueryable results=queryableData.Provider.CreateQuery(orderByCallExpression);
为什么要以字符串为基础?另外,请看一看表达式树(),它是用来构造动态表达式的。这个示例不是真正的动态,总是。OrderBy(x=>x)
。下面的问题就是我最后要讨论的问题。