Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何生成表达式<;Func<;T、 TPaginatedKey>&燃气轮机;基于字符串的表达式?_C#_Linq_Linq Expressions - Fatal编程技术网

C# 如何生成表达式<;Func<;T、 TPaginatedKey>&燃气轮机;基于字符串的表达式?

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

我正在实现中的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,
            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)
。下面的问题就是我最后要讨论的问题。