有谁知道如何LINQ表达式转换为NHibernate的HQL语句?(Does anyone know

2019-08-02 10:57发布

有谁知道现有的解决方案来翻译LINQ表达式来HQL语句的?

在此先感谢所有的好心人那里。

PS

我们已经使用LINQ的NHibernate。 然而,它仅适用于select语句,而HQL是良好的其它陈述的种类,如删除。 所以,LINQ到NHibernate的不是答案。

Answer 1:

LINQ到NHibernate的刚刚发布 。 这是否帮助?



Answer 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。 任何人对此有什么投入? 还是你解决你的问题以不同的方式?

无论如何,我认为这可能是一个伟大的除了有ISession.Delete的过载,即把一个IQueryable或IQUERY作为参数。 我是新手NHibernate的,但在我看来,应该是有人知道NHibernate的找到一些已经存在的方法和它们连接起来做的工作相当简单的任务。



Answer 3:

使用LINQ查询,HQL为删除和更新。 即使是标准仍然是有用的,而不是有时LINQ的。

这不是一个非此即彼/或情况,你可以和应该选择的每个工作的最佳工具。



文章来源: Does anyone know how to translate LINQ Expression to NHibernate HQL statement?