使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
来源:互联网 发布:zeppelin源码下载 编辑:程序博客网 时间:2024/05/22 09:51
这篇文章决定对最近一个单机版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; } }}
输出如下:
0 0
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- Redis实现类似SQL的where多条件查询
- 动态拼接LINQ查询条件的解决方案
- 根据条件查询动态拼接sql语句
- 动态sql语句拼接查询条件
- 多条件查询--使用dapper命令参数动态拼接出最安全的sql语句
- PL/SQL 动态Sql拼接where条件
- Oracle SQL 动态拼接Where后面的筛选条件
- linq 动态拼接查询条件 扩展方法
- linq 动态拼接查询条件 扩展方法
- SQL 存储过程 where 条件 动态拼接
- LINQ To SQL 拼接查询条件
- Linq动态拼接条件
- Sql语句查询当天本周本月记录的where条件
- SQL语句---from 和where 查询条件的优先级
- sql查询语句select, where的条件顺序
- 多条件查询的sql语句字符串拼接
- 在SQL查询语句中,使用条件where 1=2的意义
- C语言基础 sizeof函数产生的结果是size_t类型的变量
- 【arcgis】如何实现网络数据集的网络分析
- 1.1、开发工具——DW篇
- 把商品添加到购物车的动画效果(贝塞尔曲线)
- JSplitPane按比例分割的问题
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- google font 字体下载方式
- JScrollPane的简单用法!
- 第一次打字练习
- 人生的意义
- C语言好题&错题笔记
- 《谈修养》
- JBorder组件边框
- 机器学习与R之KNN