这篇文章决定对最近一个单机版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; }
}
}

  输出如下:

  

C# 动态Linq(结合反射)的更多相关文章

  1. 动态Linq(结合反射)

    这篇文章决定对最近一个单机版Web程序用到的东西总结一下. 一.反射Linq之OrderBy 动态Linq结合反射对某字段排序: namespace 动态Linq { class Program { ...

  2. 使用Expression Tree构建动态LINQ查询

    这篇文章介绍一个有意思的话题,也是经常被人问到的:如何构建动态LINQ查询?所谓动态,主要的意思在于查询的条件可以随机组合,动态添加,而不是固定的写法.这个在很多系统开发过程中是非常有用的. 我这里给 ...

  3. 动态LINQ(Lambda表达式)构建

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  4. 反射那些事儿——Java动态装载和反射技术

    一直以来反射都是只闻其声,却无法将之使用,近日尽心下来学习下,发现了很多精妙之处. Java动态装载和反射技术 一.类的动态装载 1.Java代码编译和执行的整个过程包含了以下三个重要的机制: ● J ...

  5. Linq技术四:动态Linq技术 -- Linq.Expressions

    前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; ...

  6. Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

  7. 自动化测试尝试 动态Linq表达式生成 ftp上传

    自动化测试尝试   1. Selenium IDE Selenium IDE is a Chrome and Firefox plugin which records and plays back u ...

  8. Spring之IOC,DI,动态代理,反射

    Spring框架是J2EE开发中一个使用广泛的框架,它使得dao和service层的维护更加便利.Spring框架有两个重要的特征,一个是IOC,另一个是AOP.我们在这里主要介绍IOC,以及IOC中 ...

  9. Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)

    实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...

随机推荐

  1. LeetCode_Regular Expression Matching

    Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...

  2. 关于google的C++ coding style

    大家都知道google的开源项目有很多,不过我观察过一些开源项目,觉得代码质量就是这家最好了.这些“教条”式规定的背后是是来自于常年工程经验积累上的理性思考. 为什么好?主要有以下几点: 1.规范,就 ...

  3. 页和区 sql server

    原文地址:http://msdn.microsoft.com/zh-cn/library/ms190969.aspx SQL Server 中数据存储的基本单位是页.为数据库中的数据文件(.mdf 或 ...

  4. VMdomainXml

    1,One,Euc,Ostack 虚拟磁盘镜像制作方法[Windows,Linux,类linux OS](1,基于ios部署系统生成img,2基于vm xml定义部署系统生成img qcow2) 如需 ...

  5. 数据库--PHP环境搭建

    一: 1.PHP的架构 LAMP :Linux  阿帕奇  MySQL  PHP WAMP:Linux 阿帕奇  Mysql  PHP (集成的环境搭建软件),一键搭建PHP开发环境工具 2.修改数据 ...

  6. java项目获取路径的几种方式

    第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...

  7. 一步一步学数据结构之n--n(Prim算法)

    在这里说下最小连通网的Prim算法: 而Kruskal算法,http://blog.csdn.net/nethanhan/article/details/10050735有介绍,大家可以去看下! Pr ...

  8. 为什么报错说req未定义,createServer只接受匿名函数吗?

    var http = require('http');var server = new http.createServer(handlerRequest(req,res));server.listen ...

  9. .net程序员转战android第三篇---登录模块之静态登录

    这一篇我将分2个部分记录登录界面,第一部分是静态登录, 这部分将如何从界面布局.控件使用.文件关系.数据验证.登陆实现等5小块记录. 第二部分是动态登录,这块会基于上面的4小块,在数据验证不是静态数据 ...

  10. 1215.1——动态分配内存的补充realloc

    当再次在原来申请的内存基础上再加内存的时候用realloc,如果第一次分配的内存后面存储地方够用,则连着原来的申请,如果不够用,就重新找到一块够用的地方,然后把原来的复制过去 int main(int ...