![](/img/trans.png)
[英]How to use order by clause in linq query with dynamic conditions?
[英]How to Check conditions in Order By clause using LINQ?
谁能帮我检查Order by子句中参数的值。
我的代码如下。
public list<TableName> functionname(Keyvalue){
return mylist.orderby(keyvalue=="Name"?x=>x.Name:x=>x.college);
}
请帮我。 谢谢。
最合适的方法是使OrderBy(parameterName)
方法接受要排序的参数的名称。 您可以编写自己的扩展方法或使用此扩展方法。 为了使用扩展方法,它必须位于静态类中。
public static class ExtensionMethods
{
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, string sortExpression)
{
sortExpression += "";
string[] parts = sortExpression.Split(' ');
bool descending = false;
string property = "";
if (parts.Length > 0 && parts[0] != "")
{
property = parts[0];
if (parts.Length > 1)
{
descending = parts[1].ToLower().Contains("esc");
}
PropertyInfo prop = typeof(T).GetProperty(property);
if (prop == null)
{
throw new Exception("No property '" + property + "' in + " + typeof(T).Name + "'");
}
if (descending)
return list.OrderByDescending(x => prop.GetValue(x, null));
else
return list.OrderBy(x => prop.GetValue(x, null));
}
return list;
}
}
接着:
return mylist.orderby(keyvalue);
不要忘记添加以下内容: using ExtensionMethods;
您可以这样:-
public List<TableName> functionname(Keyvalue)
{
return keyvalue == "Name" ? mylist.OrderBy(x=> x.Name).ToList()
: mylist.OrderBy(x => x.college).ToList();
}
尝试这个
public list<TableName> functionname(Keyvalue){
return mylist.orderby(x => keyvalue == "Name" ? x.Name :x.College ).ToList();
}
示例代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace async
{
public class students
{
public string Name { get; set; }
public string College { get; set; }
}
public class Class1
{
public List<students> filter(string keyvalue, IList<students> stud)
{
return stud.OrderBy( (x => keyvalue == "name" ? x.Name :x.College ) ).ToList();
}
public static void Main()
{
IList<students> students = new List<students>()
{
new students (){Name="xxx",College="bbb"},
new students (){Name="bbb",College="aaa"},
new students (){Name="aaa",College="xxx"}
};
Class1 c = new Class1();
var foo= c.filter("name", students);
}
}
}
List<User> list = GetAllUsers(); //Private Method
if (!sortAscending)
{
list = list
.OrderBy(r => r.GetType().GetProperty(sortBy).GetValue(r,null))
.ToList();
}
else
{
list = list
.OrderByDescending(r => r.GetType().GetProperty(sortBy).GetValue(r,null))
.ToList();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.