public void SearchUser(
string userName,
int? age
) {
// 以 NHibernate 的动态查询示例
ISession session = OpenSession();
IQueryable<User> query = session.Query<User>();
// 根据参数动态构建表达式树
if (userName.IsNotNullOrEmpty()) {
query = query.Where(user => user.UserName.Contains(userName) )
}
if (age.HasValue) {
query = query.Where(user => user.Age >= age);
}
// 可以先根据构造好的表达式树进行 Count 查询
long userCount = query.LongCount();
// 也可以继续添加其它表达式,并查询结果
IList<User> users = query.OrderBy(user => user.Id)
.Select(user => new User { Id = user.Id, UserName = user.UserName })
.ToList();
}
Last active
December 3, 2020 09:38
-
-
Save beginor/4bc9bfd25dfd9f488156cf4975b707f6 to your computer and use it in GitHub Desktop.
dynamic query demo
我已经参考了流行的所有ORM 框架了,也读了他们的代码,就靠这两点,使开发效率提升了很多,后期将项目稳定后,一定能超越这些框架
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
1)他们那些都是静态代码生成的,每次改动模型后,都需要重新编译后,才能正常使用,而我是动态生成的,结合 IntelliJ IDEA 插件自动实现,相比他们已经方便很多多了,尤其是开发早期,模型经常变。
2)我参考了JOOQ 挺多东西,你看他的Demo 里没有复杂表达式计算,因为那块处理起来特别复杂,而在实际使用时,各种数学计算是很多的,现有的所有框架都是通过函数来封装表达式计算的,plus(), minus(), multip(),如果表达式复杂,这样的函数套在一起根本看不清的。