实现不支持的方法的标准

时间:2013-02-19 23:50:26

标签: c# .net nhibernate queryover nhibernate-criteria

我编写了一个使用LINQ to NHibernate进行数据库查询的应用程序。我的域层中的代码创建类型为

的表达式
System.Linq.Expressions.Expression<Func<T, bool>>

这些传递给我的数据访问层中的存储库,然后使用它们:

return session.Query<T>.Where(expression)...

在我发现NHibernate LINQ提供程序完全忽略映射文件中的fetch =“join”选项之前,这一切都很棒,这意味着使用多个select语句而不是带有连接的单个select来获取对象。

所以我试图转到QueryOver API,它完全支持连接。我立即遇到了不支持string.Equals等方法的问题。我也有几个自定义扩展方法,我在我的表达式中使用,我已经通过扩展BaseHqlGeneratorForMethod在LINQ to NHibernate中添加了对它的支持。

如何在QueryOver API中添加对这些方法的支持?我找不到任何关于此的信息。

我知道你可以这样做:

Session.QueryOver<T>().WhereRestrictionOn(x=>x.Foo).IsInsensitiveLike("bar")

但是我正在寻找一种方法来使用我之前使用LINQ to NHibernate的相同表达式来完成所有事情。

1 个答案:

答案 0 :(得分:0)

答案似乎是不可能将lambda表达式与QueryOver API一起使用。正如奥斯卡在对该问题的评论中指出的那样,只支持非常简单的lambda表达式。我正在重写我的代码,以便存储库方法接收查询对象而不是lambda表达式。