任何人都可以帮我检查Order by子句中参数的值。
我的代码如下。
public list<TableName> functionname(Keyvalue){
return mylist.orderby(keyvalue=="Name"?x=>x.Name:x=>x.college);
}
请帮帮我。 谢谢。
答案 0 :(得分:1)
最合适的方法是使OrderBy(parameterName)
方法接受您想要的参数名称。您可以编写自己的扩展方法或使用this扩展方法。对于使用扩展方法,它必须位于静态类中。
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;
答案 1 :(得分:1)
你可以这样做: -
public List<TableName> functionname(Keyvalue)
{
return keyvalue == "Name" ? mylist.OrderBy(x=> x.Name).ToList()
: mylist.OrderBy(x => x.college).ToList();
}
答案 2 :(得分:0)
试试这个
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);
}
}
}
答案 3 :(得分:0)
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();
}