zoukankan      html  css  js  c++  java
  • Lambda 动态表达式(排序)

    网上看到的:

    class Program
        {
    
            static List<User> list = new List<User>()
            {
                new User(){ID=1,Name="Hello",Age=17,Hobby="a"},
                new User(){ID=2,Name="Boy",Age=50,Hobby="z"},
                new User(){ID=3,Name="Girl",Age=33,Hobby="x"},
                new User(){ID=4,Name="Fox",Age=43,Hobby="b"},
                new User(){ID=5,Name="Fire",Age=17,Hobby="f"},
            };
    
            static void Main(string[] args)
            {
                var q = list.AsQueryable().OrderBy("Name", true);
    
                q.ToList().ForEach(x => Console.WriteLine(string.Format("ID:{0},Name:{1},Age:{2},Hobby:{3}", x.ID, x.Name, x.Age, x.Hobby)));
    
                Console.ReadLine();
            }
    
    
        }
    
        public class User
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
            public string Hobby { get; set; }
        }
    
    //动态表达式
        public static class Test
        {
            
            public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string propertyName,
    bool asc = true) where TEntity : class
            {
                string command = asc ? "OrderBy" : "OrderByDescending";
    
                var type = typeof(TEntity);
                var property = type.GetProperty(propertyName);
                var parameter = Expression.Parameter(type, "p");
                var propertyAccess = Expression.MakeMemberAccess(parameter, property);
                var orderByExpression = Expression.Lambda(propertyAccess, parameter);
                var resultExpression = Expression.Call(typeof(Queryable), command, new Type[] { type, property.PropertyType }, source.Expression, Expression.Quote(orderByExpression));
    
                return source.Provider.CreateQuery<TEntity>(resultExpression);
            }
    
        }




  • 相关阅读:
    BLOB
    cesium 检测视图改变的代码
    有关Nodejs的一些插件介绍
    线程基础知识
    进程和线程概念对比
    C#对象与XMl文件之间的相互转换(转)
    简介C#读取XML的方式(转)
    关于c# Debug和Release的区别 (转)
    c++堆和栈(转)
    浅谈C#堆栈与托管堆的工作方式(转)
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779713.html
Copyright © 2011-2022 走看看