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# 带有表达式变量的Linq OrderBy_C#_Linq - Fatal编程技术网

C# 带有表达式变量的Linq OrderBy

C# 带有表达式变量的Linq OrderBy,c#,linq,C#,Linq,我想知道如何通过变量而不是字符串进行排序。 我相信我应该能够表示x=>x.SomeProperty并将其保存到变量中,然后将其传递到OrderBy方法中,但我不知道在这里使用什么 SomeType sortExpr = null; switch(sortByColumnName) { case "Name": sortExpr = x => x.Name break; case "Age":

我想知道如何通过变量而不是字符串进行排序。 我相信我应该能够表示
x=>x.SomeProperty
并将其保存到变量中,然后将其传递到
OrderBy
方法中,但我不知道在这里使用什么

SomeType sortExpr = null;
switch(sortByColumnName)
{
    case "Name":
        sortExpr = x => x.Name
        break;
    case "Age":
        sortExpr = x => x.Age
        break;
    case "OtherThing":
        sortExpr = x => x.OtherReference.Name
        break;
}

if (sortDirection == "asc")
    query = query.OrderBy(sortExpr);
else
    query = query.OrderByDescending(sortExpr);

如前所述,
OrderBy
接受
Func-keySelector
作为其参数,因此
sortExpr
应该是该类型的e,其中
TSource
是对象,存储在要排序的集合中,比如
User
TKey
是要排序的属性类型,因为它可以是任意类型,所以可以将其设置为
对象,因为此类型参数是协变的

所以说像

Func<User, object> sortExpr;
Func-sorterxpr;
rest代码可以保持原样

编辑

如果您使用的是
IQueryable.OrderBy
version,它需要
Expression
,那么您只需要将变量delare为:

Expression<Func<User, object>> sortExpr;
表达式分类器;

如前所述,
OrderBy
接受
Func-keySelector
作为其参数,因此
sortExpr
应为该类型,其中
TSource
是对象,存储在要排序的集合中,比如
User
TKey
是要排序的属性类型,因为它可以是任意类型,所以可以将其设置为
对象,因为此类型参数是协变的

所以说像

Func<User, object> sortExpr;
Func-sorterxpr;
rest代码可以保持原样

编辑

如果您使用的是
IQueryable.OrderBy
version,它需要
Expression
,那么您只需要将变量delare为:

Expression<Func<User, object>> sortExpr;
表达式分类器;

OrderBy
接受
Func键选择器
@PavelAnikhouski取决于
查询
IEnumerable
还是
IQueryable
。后者需要一个
表达式
OrderBy
接受
Func键选择器
@PavelAnikhouski取决于
查询
IEnumerable
还是
IQueryable
。后者需要一个
表达式
。这取决于
查询
IEnumerable
还是
IQueryable
。后者需要一个
表达式
@JohnathanBarclay谢谢,包括它就是我要找的,泰!取决于
query
IEnumerable
还是
IQueryable
。后者需要一个
表达式
@JohnathanBarclay谢谢,包括它就是我要找的,泰!