Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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动态排序<;IQueryable<;T>;,IOrderedQueryable<;T>&燃气轮机;_C#_.net_Sorting_Core_Dynamic Linq - Fatal编程技术网

C# 使用Func动态排序<;IQueryable<;T>;,IOrderedQueryable<;T>&燃气轮机;

C# 使用Func动态排序<;IQueryable<;T>;,IOrderedQueryable<;T>&燃气轮机;,c#,.net,sorting,core,dynamic-linq,C#,.net,Sorting,Core,Dynamic Linq,我想查询结果和显示顺序的基础上Id,Nam,电话和电子邮件谁能帮我怎么做。 预期结果 table1result=> table1.OrderBy(c => c.Id).ThenBy(c => c.Name).ThenBy(c => c.table2.Name).ThenBy(c=>c.table2.Phone) 下面是导致 Func<IQueryable<T>, IOrderedQueryable<T>> orderExpr

我想查询结果和显示顺序的基础上Id,Nam,电话和电子邮件谁能帮我怎么做。 预期结果

table1result=> table1.OrderBy(c => c.Id).ThenBy(c => c.Name).ThenBy(c => c.table2.Name).ThenBy(c=>c.table2.Phone)
下面是导致

  Func<IQueryable<T>, IOrderedQueryable<T>> orderExpression = o => o.OrderBy(a => a.Id);
switch(case)
{
 case "Id" : orderExpression = o => o.OrderBy(a => a.Id);
break;
    case "name" : orderExpression = o => o.OrderBy(a => a.Name);
break;
   case "phone" : orderExpression = o => o.OrderBy(a => a.table2.phone);
break;
.
.
.
.
}
which result in 
table1result=> table1.OrderBy(a => a.Id);

Func orderExpression=o=>o.OrderBy(a=>a.Id);
开关(外壳)
{
案例“Id”:orderExpression=o=>o.OrderBy(a=>a.Id);
打破
案例“name”:orderExpression=o=>o.OrderBy(a=>a.name);
打破
案例“phone”:orderExpression=o=>o.OrderBy(a=>a.table2.phone);
打破
.
.
.
.
}
导致
table1result=>table1.OrderBy(a=>a.Id);

谢谢并非常感谢您的帮助?

我写了一个
IQueryable
扩展,也许对您的情况会有所帮助:

公共静态类QueryableExtensions
{
公共静态IQueryable排序(此IQueryable源,
IEnumerable字段(排序)
{
Expression=source.Expression;
bool firstTime=true;
foreach(fieldsToSort中的变量f)
{
//{x}
var参数=表达式参数(类型为(T),“x”);
//{x.FIELD},例如,{x.ID},{x.Name}等
var选择器=Expression.PropertyOrField(参数f);
//{x=>x.FIELD}
var lambda=Expression.lambda(选择器,参数);
//您可以包括高级案例的排序说明
var方法=第一次
?“订购人”
:“ThenBy”;
//{OrderBy(x=>x.FIELD)}
expression=expression.Call(
类型(可查询),
方法,,
新类型[]{source.ElementType,selector.Type},
表情,
Expression.Quote(lambda)
);
第一次=错误;
}
第一次返回
?来源
:source.Provider.CreateQuery(表达式);
}
}
因此,此扩展方法将应用字段列表,在
IQueryable
源上使用“OrderBy”(如果是第一次)或“ThenBy”(否则)进行排序

然后你可以像这样使用它:

var table1Result=table1
.SortBy(新字符串[]{“Id”、“Name”、“Phone”});