博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态Linq(结合反射)
阅读量:4583 次
发布时间:2019-06-09

本文共 2836 字,大约阅读时间需要 9 分钟。

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

一、反射Linq之OrderBy

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

namespace 动态Linq{    class Program    {        static void Main(string[] args)        {            List
ListP = new List
(); 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
ListT = PageSortList
(ListP, ht); foreach (Person p in ListT) { Console.WriteLine(p.Id); } Console.ReadKey(); } //分页排序 public static List
PageSortList
(List
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
ListP = new List
(); 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
ListT = PageSortList
(ListP, ht); foreach (Person p in ListT) { Console.WriteLine(p.Id); } Console.ReadKey(); } //分页排序 public static List
PageSortList
(List
ListT, Hashtable ht) { string Key = ht.Cast
().FirstOrDefault().Key.ToString(); string Value = ht.Cast
().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; } }}

  输出如下:

  

转载于:https://www.cnblogs.com/sylone/p/6094399.html

你可能感兴趣的文章
shell 脚本后台运行知识
查看>>
php设置cookie,在js中如何获取
查看>>
实验三+099+吴丹丹
查看>>
[bzoj3036]绿豆蛙的归宿
查看>>
[洛谷P5057][CQOI2006]简单题
查看>>
多线程同步的几种方法
查看>>
数据结构-冒泡排序
查看>>
关于程序状态字寄存器PSW(Program Status Word)与多核多线程
查看>>
mybatis的缓存
查看>>
java 缓冲流 Buffer
查看>>
7月23号=》261页-265页
查看>>
软考知识点梳理--综合布线
查看>>
Mysql5.6主从热备配置
查看>>
VS2010DebugView捕捉
查看>>
mfix中更改time dependent VTK filename的最大时间步数的容量
查看>>
Windows7安装 docker-compose的过程
查看>>
关于nodeJS多线程的支持,目前看来无法实现,讲解v8的一些东西
查看>>
php递归创建文件夹的两种方法
查看>>
6.新增事件
查看>>
|洛谷|二分|P1182 数列分段Section II
查看>>