System.Linq.Dynamic 和Nhibernate
var session = NHibernateSessionManager.Instance.GetSession(); var exp = System.Linq.Dynamic.DynamicExpression.ParseLambda<HrStaff,bool>("StaffNo ==@0","0006"); var staffList = session.QueryOver<HrStaff>().Where(exp).RootCriteria.Add(Restrictions.Eq("StaffName","n")).List();
公司里Nihibernate代码用的ICriteria 方式,但是要一些过滤条件希望用表达式实现,找了一下System.Linq.Dynamic ,不过文档只有动态代理Where,OrderBy,Select
,当然Nhibernate.linq有Linq方式,但是Linq方式和ICriteria 方式不能同时用,QueryOver到是可以和ICriteria 方式通用,找了一下源代码有方式DynamicExpression.ParseLambda,可以解决问题。
ps:nuget.org上System.Linq.Dynamic 没有签名,codeplex上的代码发现只有一个文件,就把这文件合并在自己dll里