首页>Program>source

是否有人知道将LINQ表达式转换为HQL语句的现有解决方案?

在此先感谢所有好心的撒玛利亚人。

P.S。

我们已经使用Linq进行NHibernate.但是,它仅适用于select语句,而HQL适用于其他语句类型,例如delete.因此,Linq到NHibernate并不是答案。

最新回答
  • 1月前
    1 #

    Linq到nhibernate刚刚发布.

  • 1月前
    2 #

    我有完全相同的需求:我需要使用LINQ表达式进行删除,但是NHibernate仅支持使用HQL或SQL进行删除.我不类似这种方法,因为其余的代码都是使用LINQ表达式完全强类型化的,然后我不得不将其与表和属性名称以及操作字符串相关联。

    我正在使用NHibernate 3.0,并且使用率达到了95%,但是我不得不使用反射来调用一些私有/内部方法.下面为我​​提供了用于LINQ表达式的HqlQuery对象:

    NhQueryable<Product> queryable = (from p in session.Query<Product>()
                                 where p.ProductId == 1
                                 select p) as NhQueryable<Product>;
                if (queryable != null)
                {
                    Expression expression = queryable.Expression;
                    NhQueryProvider provider = queryable.Provider as NhQueryProvider;
                    MethodInfo prepareQueryMethod = typeof(NhQueryProvider).GetMethod("PrepareQuery", BindingFlags.Instance | BindingFlags.NonPublic);
                    object[] arguments = new object[] {expression, null, null};
                    NhLinqExpression nhLinqExpression = prepareQueryMethod.Invoke(provider, arguments) as NhLinqExpression;
                    ExpressionToHqlTranslationResults translationResults = nhLinqExpression.ExpressionToHqlTranslationResults;
                    HqlQuery hql = translationResults.Statement as HqlQuery;
                }
    

    我坚持认为我无法将HqlQuery对象转换为HQL字符串.有人对此有任何意见吗? 还是您以其他方式解决了问题?

    无论如何,我认为将ISessionable或IQuery作为参数的ISession.Delete重载可能是一个很好的补充.我是NHibernate的新手,但是在我看来,对于知道NHibernate的人来说,找到一些已经存在的方法并将它们连接起来以完成工作应该是一个相当简单的任务。

  • 1月前
    3 #

    使用LINQ进行查询 ,HQL用于删除和更新.有时甚至使用条件代替LINQ仍然有用.

    这不是非此即彼的情况,您可以并且应该为每项工作选择最好的工具。

  • c++:想要将方法放入QThread
  • PHP, Javascript:PHP,Javascript-将日期独立输出到"每个"网格