zoukankan      html  css  js  c++  java
  • C# 动态Linq(结合反射)

     

      这篇文章决定对最近一个单机版Web程序用到的东西总结一下。

    一、反射Linq之OrderBy

      动态Linq结合反射对某字段排序:

    复制代码
    namespace 动态Linq
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Person> ListP = new List<Person>();
                ListP.Add(new Person(1, "刘备", 40));
                ListP.Add(new Person(2, "关羽", 35));
                ListP.Add(new Person(3, "张飞", 29));
    
                Hashtable ht = new Hashtable();
                ht.Add("SortName","Id");
                ht.Add("SortOrder","desc");
    
                List<Person> ListT = PageSortList<Person>(ListP, ht);
                foreach (Person p in ListT)
                {
                    Console.WriteLine(p.Id);
                }
    
                Console.ReadKey();
            }
    
            //分页排序
            public static List<T> PageSortList<T>(List<T> ListT, Hashtable ht)
            {
                string SortName = ht["SortName"].ToString();
                string SortOrder = ht["SortOrder"].ToString();
                if (!string.IsNullOrEmpty(SortName))
                {
                    if (SortOrder.ToLower() == "desc")
                    {
                        ListT = ListT.OrderByDescending(m => m.GetType().GetProperty(SortName).GetValue(m, null)).ToList();
                    }
                    else
                    {
                        ListT = ListT.OrderBy(m => m.GetType().GetProperty(SortName).GetValue(m, null)).ToList();
                    }
                }
                return ListT;
            }
        }
    
        public class Person
        {
            public Person(int id, string name, int age) { Id = id; Name = name; Age = age; }
    
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
    复制代码

      输出如下:

      

      唯一要注意的东西,刚开始写的不正确,实际上排序始终都是对属性的值排序。这种东西有没有用呢?

      线上系统一般很少用,但是最近项目要求做一个离线版Web,离线操作,连线导入数据。Oracle转Xml,如果不大量采用泛型与反射,估计得写一年左右。

    二、反射Linq之Where

      动态Linq使用Where

    复制代码
    namespace 动态Linq
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<Person> ListP = new List<Person>();
                ListP.Add(new Person(1, "刘备", 40));
                ListP.Add(new Person(2, "关羽", 35));
                ListP.Add(new Person(3, "张飞", 29));
    
                Hashtable ht = new Hashtable();
                ht.Add("Name","关羽");
    
                List<Person> ListT = PageSortList<Person>(ListP, ht);
                foreach (Person p in ListT)
                {
                    Console.WriteLine(p.Id);
                }
    
                Console.ReadKey();
            }
    
            //分页排序
            public static List<T> PageSortList<T>(List<T> ListT, Hashtable ht)
            {
                string Key = ht.Cast<DictionaryEntry>().FirstOrDefault().Key.ToString();
                string Value = ht.Cast<DictionaryEntry>().FirstOrDefault().Value.ToString();
                ListT = ListT.Where(m => m.GetType().GetProperty(Key).GetValue(m, null).ToString() == Value).ToList();
                return ListT;
            }
        }
    
        public class Person
        {
            public Person(int id, string name, int age) { Id = id; Name = name; Age = age; }
    
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
        }
    }
    复制代码

      输出如下:

      

  • 相关阅读:
    PHP基础函数、自定义函数以及数组
    php 中 isset 和empty 的区别
    mysql中索引的使用
    mysql 中的增改查删(CRUD)
    mysql语句应该注意的问题
    《zw版·Halcon-delphi系列原创教程》 水果自动分类脚本(机器学习、人工智能)
    《zw版·Halcon-delphi系列原创教程》 2d照片-3d逆向建模脚本
    《zw版·Halcon-delphi系列原创教程》简单的令人发指,只有10行代码的车牌识别脚本
    《zw版·Halcon-delphi系列原创教程》航母舰载机·视觉定位标志的识别代码
    zw版_zw中文增强版Halcon官方Delphi例程
  • 原文地址:https://www.cnblogs.com/mingxuantongxue/p/3730082.html
Copyright © 2011-2022 走看看