关于IList、IQueryable、IEnumerable与Func、Expression的关系2-详解
来源:互联网 发布:淘宝代理需要多少钱 编辑:程序博客网 时间:2024/06/06 01:32
关于IList、IQueryable、IEnumerable与Func、Expression的关系2-详解
Core Object
NHibernate:ISession -> CreateCriteria
VS.NET:System.Linq -> Queryable、Enumerable
HNibernate工厂类
using System;using System.Collections.Generic;using NHibernate;using NHibernate.Cfg;using System.Configuration;using System.Configuration.Assemblies;using System.Web;namespace TestPro.DAO{ /// <summary> /// Data access base class /// </summary> public class NHibernateHelper { protected static ISessionFactory session; public static ISession GetSession() { if (session == null) { lock (typeof(NHibernateHelper)) { if (session == null) { //Configuration cfg = new Configuration(); //cfg.AddAssembly("Domain"); string cfgpath = System.Web.HttpContext.Current.Server.MapPath("~/" + "hibernate.cfg.xml");//"~/hibernate.cfg.xml");"..\\hibernate.cfg.xml" var cfg = new NHibernate.Cfg.Configuration().Configure(cfgpath);//C:\Program Files (x86)\IIS Express(我在这个目录下放了这个文件hibernate.cfg.xml) session = cfg.BuildSessionFactory(); } } } return session.OpenSession(); //return session.OpenSession(new SQLWatcher()); } } public class SQLWatcher : EmptyInterceptor { public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql) { System.Diagnostics.Debug.WriteLine("sql语句:" + sql); return base.OnPrepareStatement(sql); } }}
NHibernateDAL
using System;using System.Collections.Generic;using System.Linq;using golSysLin=System.Linq;using System.Linq.Expressions;using System.Text;using System.Threading.Tasks;using NHibernate;using Domain;namespace TestPro.DAO{ public class TabUserDAO { #region Constructor /// <summary> /// Construtor /// </summary> public TabUserDAO() : base() { } #endregion #region Methods /// <summary> /// Method responsible to insert TabUser objects into the database /// </summary> /// <param name="tabUser"></param> /// <returns></returns> public TabUser Insert(TabUser tabUser) { ISession session = NHibernateHelper.GetSession(); session.Save(tabUser); session.Flush(); session.Close(); return session.Get<TabUser>(tabUser.ID); } /// <summary> /// Method responsible to edit TabUser objects from a database /// </summary> /// <param name="tabUser"></param> /// <returns></returns> public TabUser Edit(TabUser tabUser) { ISession session = NHibernateHelper.GetSession(); session.Update(tabUser); session.Flush(); session.Close(); return session.Get<TabUser>(tabUser.ID); } /// <summary> /// Method responsible to delete TabUser objects from a database /// </summary> /// <param name="tabUser"></param> /// <returns></returns> public void Delete(TabUser tabUser) { ISession session = NHibernateHelper.GetSession(); session.Delete(tabUser); session.Flush(); session.Close(); } /// <summary> /// Method responsible to list TabUser objects from a database /// </summary> /// <param name="tabUser"></param> /// <returns></returns> public IList<TabUser> List() { ISession session = NHibernateHelper.GetSession(); return session.CreateCriteria(typeof(TabUser)).List<TabUser>();//return session.CreateCriteria<TabUser>().List<TabUser>(); //return session.CreateCriteria(typeof(TabUser)).List<TabUser>().Where(i=>i.ID<10).ToList<TabUser>(); } public IList<TabUser> List(Func<TabUser, bool> where) { return Listable(where).ToList<TabUser>(); } public IList<TabUser> List(Expression<Func<TabUser, bool>> where) { return Listable(where).ToList<TabUser>(); } /// <summary> /// Method responsible to list TabUser objects for IQueryable of Func from a database /// </summary> public IList<TabUser> ListByQueryable(Func<TabUser, bool> where) { return Queryable(where).ToList<TabUser>(); } /// <summary> /// Method responsible to list TabUser objects for IQueryable of Expression from a database /// </summary> public IList<TabUser> ListByQueryable(Expression<Func<TabUser, bool>> where) { return Queryable(where).ToList<TabUser>(); } public IList<TabUser> ListByEnumerable(Func<TabUser, bool> where) { return Enumerable(where).ToList<TabUser>(); } public IList<TabUser> ListByEnumerable(Expression<Func<TabUser, bool>> where) { return Enumerable(where).ToList<TabUser>(); } public IQueryable<TabUser> ListOfQueryable(Func<TabUser, bool> where) { return Queryable(where); } public IQueryable<TabUser> ListOfQueryable(Expression<Func<TabUser, bool>> where) { return Queryable(where); } public IEnumerable<TabUser> ListOfEnumerable(Func<TabUser, bool> where) { return Enumerable(where); } public IEnumerable<TabUser> ListOfEnumerable(Expression<Func<TabUser, bool>> where) { return Enumerable(where); } //(IEnumerable<TabUser>)//如果性能不行可以把以下函数的返回值都修改为IEnumerable类型,该数据类型是泛型,是安全的。 private IList<TabUser> Listable(Func<TabUser, bool> where)//1 second select { //where = (t) => { string name = t.Name.Trim();return t.Name == name; }; ISession session = NHibernateHelper.GetSession(); return session.CreateCriteria(new TabUser().GetType()).List<TabUser>().Where(where).ToList<TabUser>();//where = t => t.Age > 30 && t.Age < 40; } private IList<TabUser> Listable(Expression<Func<TabUser, bool>> where)//3 { ISession session = NHibernateHelper.GetSession(); return session.CreateCriteria(typeof(TabUser)).List<TabUser>().Where(where.Compile()).ToList<TabUser>(); } private IQueryable<TabUser> Queryable(Func<TabUser, bool> where)//4 { ISession session = NHibernateHelper.GetSession(); return global::System.Linq.Queryable.Where(session.CreateCriteria(typeof(TabUser)).List<TabUser>().AsQueryable(), ex => where(ex)); } private IQueryable<TabUser> Queryable(Expression<Func<TabUser, bool>> where) //2 { ISession session = NHibernateHelper.GetSession(); return golSysLin::Queryable.Where(session.CreateCriteria(typeof(TabUser)).List<TabUser>().AsQueryable(), where);// } private IEnumerable<TabUser> Enumerable(Func<TabUser, bool> where)//1 first select { ISession session = NHibernateHelper.GetSession(); return golSysLin::Enumerable.Where(session.CreateCriteria(typeof(TabUser)).List<TabUser>().AsEnumerable<TabUser>(), where); } private IEnumerable<TabUser> Enumerable(Expression<Func<TabUser, bool>> where)//3 { ISession session = NHibernateHelper.GetSession(); return golSysLin::Enumerable.Where(session.CreateCriteria(typeof(TabUser)).List<TabUser>().AsEnumerable<TabUser>(), where.Compile()); } #endregion #region Extend #endregion } enum ListOfType { IQUERYABLE, IENUMERABLE }}
MVC控制器层
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using Business;using Domain;using Ninject;using Ninject.Injection;using Ninject.Modules;using System.Linq.Expressions;using System.Diagnostics;namespace TestMVC.Controllers{ public class TabUserController : Controller { TabUserBusiness obj = new TabUserBusiness(); public ActionResult Index() { var iterations = 100; var watch = new Stopwatch(); IList<TabUser> list = new List<TabUser>(); //var list = new List<TabUser>(); watch.Start(); for (int i = 0; i < iterations; i++) { Func<TabUser, bool> func = null; //list = obj.ListByOver();//.ToList(); list = obj.List((Func<TabUser, bool>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIListFunc"] = watch.ElapsedMilliseconds; var list2 = new List<TabUser>(); watch.Reset(); watch.Start(); for (int i = 0; i < iterations; i++) { list2 = obj.List((Expression<Func<TabUser, bool>>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIListExpr"] = watch.ElapsedMilliseconds; var list3 = new List<TabUser>();//.AsQueryable(); watch.Reset(); watch.Start(); for (int i = 0; i < iterations; i++) { list3 = obj.ListByQueryable((Func<TabUser, bool>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIQueryableFunc"] = watch.ElapsedMilliseconds; var list4 = new List<TabUser>();//.AsQueryable(); watch.Reset(); watch.Start(); for (int i = 0; i < iterations; i++) { list4 = obj.ListByQueryable((Expression<Func<TabUser, bool>>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIQueryableExpr"] = watch.ElapsedMilliseconds; var list5 = new List<TabUser>();//.AsEnumerable(); watch.Reset(); watch.Start(); for (int i = 0; i < iterations; i++) { list5 = obj.ListByEnumerable((Func<TabUser, bool>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIEnumerableFunc"] = watch.ElapsedMilliseconds; var list6 = new List<TabUser>();//.AsEnumerable(); watch.Reset(); watch.Start(); for (int i = 0; i < iterations; i++) { list6 = obj.ListByEnumerable((Expression<Func<TabUser, bool>>)(u => 1 == 1)).ToList(); } watch.Stop(); ViewData["WatchIEnumerableExpr"] = watch.ElapsedMilliseconds; return View(list3); //http://localhost:55881/TabUser/Index } }}
BLL层
using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expressions;using System.Text;using System.Threading.Tasks;using TestPro.DAO;using Domain;namespace Business{ public class TabUserBusiness { private TabUserDAO obj; public TabUserBusiness() { obj = new TabUserDAO(); } public IList<TabUser> List(Func<TabUser, bool> where)// { return obj.List(where); } public IList<TabUser> List(Expression<Func<TabUser, bool>> where) { return obj.List(where); } public IList<TabUser> ListByQueryable(Func<TabUser, bool> where) { return obj.ListByQueryable(where); } public IList<TabUser> ListByQueryable(Expression<Func<TabUser, bool>> where) { return obj.ListByQueryable(where); } public IList<TabUser> ListByEnumerable(Func<TabUser, bool> where) { return obj.ListByEnumerable(where); } public IList<TabUser> ListByEnumerable(Expression<Func<TabUser, bool>> where) { return obj.ListByEnumerable(where); } public IEnumerable<TabUser> ListOfEnumerable(Func<TabUser, bool> where) { return obj.ListOfEnumerable(where); } public IEnumerable<TabUser> ListOfEnumerable(Expression<Func<TabUser, bool>> where) { return obj.ListOfEnumerable(where); } }}
版权所有,转载请注明文章出处 http://blog/csdn.net/cadenzasolo
0 0
- 关于IList、IQueryable、IEnumerable与Func、Expression的关系2-详解
- 关于IList、IQueryable、IEnumerable与Func、Expression的关系
- IList,ICollection,IEnumerable,IEnumerator,IQueryable详解
- IList,ICollection,IEnumerable,IEnumerator,IQueryable
- IList,ICollection,IEnumerable,IEnumerator,IQueryable
- Entity Framework中IQueryable, IEnumerable, IList的区别
- Entity Framework中IQueryable, IEnumerable, IList的区别
- Entity Framework中IQueryable, IEnumerable, IList的区别
- 关于Linq的ToList(),IEnumerable,IQueryable
- IEnumerable与IQueryable
- IEnumerable, IQueryable的区别
- Entity Framework中使用IEnumerable<T>、IQueryable<T>及IList<T>的区别
- IEnumerable接口与IQueryable 接口
- 那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable
- 那些年我还不懂:IList,ICollection,IEnumerable,IEnumerator,IQueryable
- IEnumerable和IQueryable的区别
- IQueryable和IEnumerable的区别
- IQueryable和IEnumerable的区别
- hdu1042 N!
- 数据挖掘-MATLAB下svm小例子
- 大小端及网络字节序
- 深入理解Java虚拟机笔记---class类文件结构概述
- MotionEvent常量篇
- 关于IList、IQueryable、IEnumerable与Func、Expression的关系2-详解
- Redis快速入门
- wdk驱动开发的特点
- 图片编辑canvas
- 46.BOOL / bool / Boolean / NSCFBoolean
- poj-2236-Wireless Network
- 既然选择了前方,便不顾风雨兼程。
- Codeforces 645A Amity Assessment【八数码】
- JS代码预解析原理