繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM