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; }
}
}
输出如下:
C# 动态Linq(结合反射)的更多相关文章
- 动态Linq(结合反射)
这篇文章决定对最近一个单机版Web程序用到的东西总结一下. 一.反射Linq之OrderBy 动态Linq结合反射对某字段排序: namespace 动态Linq { class Program { ...
- 使用Expression Tree构建动态LINQ查询
这篇文章介绍一个有意思的话题,也是经常被人问到的:如何构建动态LINQ查询?所谓动态,主要的意思在于查询的条件可以随机组合,动态添加,而不是固定的写法.这个在很多系统开发过程中是非常有用的. 我这里给 ...
- 动态LINQ(Lambda表达式)构建
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- 反射那些事儿——Java动态装载和反射技术
一直以来反射都是只闻其声,却无法将之使用,近日尽心下来学习下,发现了很多精妙之处. Java动态装载和反射技术 一.类的动态装载 1.Java代码编译和执行的整个过程包含了以下三个重要的机制: ● J ...
- Linq技术四:动态Linq技术 -- Linq.Expressions
前面介绍了Linq的三个方面应用:Linq to SQL, Linq to XML和Linq to Object,这篇介绍一下动态Linq的实现方式及应用场景. 命名空间: System.Linq; ...
- Python 实现接口类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现接口类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
- 自动化测试尝试 动态Linq表达式生成 ftp上传
自动化测试尝试 1. Selenium IDE Selenium IDE is a Chrome and Firefox plugin which records and plays back u ...
- Spring之IOC,DI,动态代理,反射
Spring框架是J2EE开发中一个使用广泛的框架,它使得dao和service层的维护更加便利.Spring框架有两个重要的特征,一个是IOC,另一个是AOP.我们在这里主要介绍IOC,以及IOC中 ...
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
实现抽象类的两种方式 方式一 from abc import ABCMeta from abc import abstractmethod class BaseMessage(metaclass=AB ...
随机推荐
- Android 有缓存功能的请求封装接口
/* * @Company 浙 江 鸿 程 计 算 机 系 统 有 限 公 司 * @URL http://www.zjhcsoft.com * @Address 杭州滨江区伟业路1号 * @Emai ...
- ListView中添加ScrollView只显示一两行的问题
将ListView改为继承NoScrollListView package com.example.brtz.widget; import android.content.Context; impor ...
- if条件语句练习(相亲)
public class a { public static void main(String[] arg){ //F是房子,Q是钱,N是能力,等于0说明没有,等于1说明有: 有一项具备则可以嫁,都不 ...
- Js操作Select
jquery操作select(取值,设置选中) 每一次操作select的时候,总是要出来翻一下资料,不如自己总结一下,以后就翻这里了. 比如<select class="selecto ...
- 格而知之16:我所理解的Block(3)
23.在前文中的例子中,Block结构体里的isa指针还没有详细讲解,这个指针都被置向了_NSConcreteStackBlock,它标识了Block的类型. 其实除了_NSConcreteStack ...
- Java实现将指定目录内的指定类型的文件归类
这两天在学Java IO流,正好让我产生了将自己的电子书归类的打算,说做就做,Why not?看着自己所学所用能解决生活中的实际问题,是不是非常有成就感,那是必须的! package DepthSea ...
- [Regex Expression] Tagline --- {0, } {1,10}
Using a character set repeated 1 or more times, make a pattern to search for strings that do not con ...
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
- CentOs7下systemd管理知识要点
centOs7的一个巨大的变动就是用systemd取代了原来的System V init.systemd是一个完整的软件包,安装完成后有很多物理文件组成,大致分布为,配置文件位于/etc/system ...
- eclipse中Java代码导入包,出现main.java前缀
1.工程右击,按照下图指示的选择 2.按照下图,进行删除选中项,然后点击OK保存