C# NHibernate数据上下文中SQL文本的Linq表达式

C# NHibernate数据上下文中SQL文本的Linq表达式,c#,nhibernate,linq-to-sql,expression,linq-to-nhibernate,C#,Nhibernate,Linq To Sql,Expression,Linq To Nhibernate,假设我已经用所有关系、表、连接等设置了NHibernate数据上下文 如何将实例化的.NET表达式(实际上它不是一个完整的SELECT表达式,只是一个WHERE表达式)转换为SQL字符串 我看过很多参考资料。就像使用ExpressionVisitor或构建IQueryable提供程序一样,但我相信NHibernate 3有所有这些实现,我只需要组合一些类就可以实现这一目标。蚂蚁的想法?好吧,在发布了这个问题之后,在这里找到了一种方法: 实际上,只能为完整的SELECT查询获取文本,否则会引发异常

假设我已经用所有关系、表、连接等设置了NHibernate数据上下文

如何将实例化的.NET表达式(实际上它不是一个完整的SELECT表达式,只是一个WHERE表达式)转换为SQL字符串


我看过很多参考资料。就像使用ExpressionVisitor或构建IQueryable提供程序一样,但我相信NHibernate 3有所有这些实现,我只需要组合一些类就可以实现这一目标。蚂蚁的想法?

好吧,在发布了这个问题之后,在这里找到了一种方法:

实际上,只能为完整的SELECT查询获取文本,否则会引发异常:


无法分析表达式“(rec.Id==6)”,因为它的类型不受支持。只能解析查询源(即实现IEnumerable的表达式)和查询运算符。

有关如何通过编写自定义批处理程序来拦截sql查询,请参阅我的其他答案:
它也适用于Sql Server,一旦您截获查询,您就可以通过返回空结果来阻止查询执行。

您使用的是哪个特定版本的NHibernate?上次我检查时(大约1.5年前),即使是不同的3.x版本也有一些显著的API差异。@Cupcake我使用的是3.3.1.4000版本。事实上,我找到了解决方案并发布了答案。尽管将表达式的一部分转换为SQL不起作用。嘿@ReverseBlade谢谢你的评论,尽管我不想截取nHibernate或查看发送到DB的查询。我只是想将部分表达式查询(WHERE部分)转换为SQL文本。使用nHibernate似乎是不可能的,因为只能翻译可枚举表达式。