如何使用LINQ检查Order By子句中的条件?

时间:2015-03-21 05:07:22

标签: c# asp.net linq

任何人都可以帮我检查Order by子句中参数的值。

我的代码如下。

public list<TableName> functionname(Keyvalue){
    return mylist.orderby(keyvalue=="Name"?x=>x.Name:x=>x.college);
}

请帮帮我。 谢谢。

4 个答案:

答案 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();
}