关于IList、IQueryable、IEnumerable与Func、Expression的关系
session是NHibernate中的ISession对象
IList、IQueryable、 IEnumerable是.NET对象
Func和Expression是C#3.0中的Linq类库中的二个对象
Func:函数,也可称做委托。
Expression:表达式。
以下是这篇文章中用到的三个数据操作的核心对象:
seeion.CreateCriteria, Queryable, Enumerable
seeion.CreateCriteria -> Func<T, bool>
Queryable -> Expression<Func<T, bool>> -> Linq to sql
Enumerable -> Func<T, bool> -> Linq to object
Func = Expression.Compile
Expression = ex => Func(ex)
//没有func或expression的函数,也就是没有where(predicate)条件的函数
//3个返回IList<T>类型的函数IList<T> List()
IList seeion.CreateCriteria no func/no expression 有意义(
IList Queryable where=t=>true no func/no expression 无意义
IList Enumerable where=t=>true no func/no expression 无意义
//3个IQueryable<T> List()
IQueryable seeion.CreateCriteria no func/no expression 有意义
IQueryable Queryable where=t=>true no func/no expression 无意义
IQueryable Enumerable where=t=>true no func/no expression 无意义
3个IEnumerable<T> List()
IEnumerable seeion.CreateCriteria no func/no expression 有意义
IEnumerable Queryable where=t=>true no func/no expression 无意义
IEnumerable Enumerable where=t=>true no func/no expression 无意义
//有func或expression的函数,也就是有where(predicate)条件的函数
//6个返回IList<T>类型的函数IList<T> List(func/expr) Speed
IList where func 1first
IList where.compile() expression 3third
IList Queryable ex => where(ex) func 4worst
IList Queryable where expression 2second
IList Enumerable where func 1first
IList Enumerable where.compile()expression 3third
//6个返回IQueryable<T>的函数
IQueryable where func
IQueryable where.compile() expression
IQueryable Queryable ex => where(ex) func
IQueryable Queryable where expression
IQueryable Enumerable where func
IQueryable Enumerable where.compile() expression
//6个返回IEnumerable<T>的函数
IEnumerable where func
IEnumerable where.compile() expression
IEnumerable Queryable where expression
IEnumerable Queryable ex => where(ex) func
IEnumerable Enumerable where.compile() expression
IEnumerable Enumerable where func
以上代码通过筛选后得到6个方法
1.IList where func
2.IList where.compile() expression
3.IQueryable Queryable ex => where(ex) func
4.IQueryable Queryable where expression
5.IEnumerable Enumerable where.compile() expression
6.IEnumerable Enumerable where func
第一:1和6效率最高, func(从函数到函数)
第二:然后是4次之, expression(从表达式到表达式)
第三:2和5第三, 表达式编译(从表达式到函数)
第四:3是最慢的, 表达式代入函数(从函数到表达式)
通过 以上代码我们可以得知:
session接受func参数
Queryable接受expression参数
Enumerable接受func参数
版权所有,转载请注明文章出处 http://blog/csdn.net/cadenzasolo