实现不支持的方法的条件
本文关键字:条件 方法 实现 不支持 | 更新日期: 2023-09-27 18:00:07
我编写了一个应用程序,它使用LINQ to NHibernate进行数据库查询。我的域层中的代码创建类型的表达式
System.Linq.Expressions.Expression<Func<T, bool>>
这些被传递到我的数据访问层中的存储库,然后它们像这样使用它们:
return session.Query<T>.Where(expression)...
在我发现NHibernate LINQ提供程序完全忽略映射文件中的fetch="join"选项之前,这一切都很好,这意味着使用多个select语句而不是一个带join的select语句来提取对象。
因此,我尝试转到QueryOver API,它完全支持联接。我立刻遇到了像字符串这样的方法的问题。不支持Equals。我还有几个自定义的扩展方法,我在表达式中使用这些方法,为此,我通过扩展BaseHqlGeneratorForMethod,在LINQ中添加了对NHibernate的支持。
如何在QueryOver API中添加对这些方法的支持?我找不到这方面的任何信息。
我知道你可以这样做:
Session.QueryOver<T>().WhereRestrictionOn(x=>x.Foo).IsInsensitiveLike("bar")
但我正在寻找一种方法,使用与我之前在LINQ to NHibernate中使用的表达式相同的表达式来完成所有操作。
答案似乎是不可能将lambda表达式与QueryOver API一起使用。正如Oskar在对这个问题的评论中指出的那样,只支持非常简单的lambda表达式。我正在重写代码,以便存储库方法接收查询对象,而不是lambda表达式。