从nhibernate 3.0查询xml列

时间:2011-10-06 13:53:19

标签: xml nhibernate xpath xquery

我的一个实体中有一个xml列 我管理使用用户类型并将此列映射到我的XmlElement类型的实体中的属性 我想知道我是否可以从代码中查询此对象,就像我使用QueryOver执行sql一样? 我找到了像here这样的东西。但我不明白如何查询它

提前谢谢

1 个答案:

答案 0 :(得分:0)

好吧,这就是我如何做到的 不是最原始的代码
但无论如何...... 我使用underlyingcriteria属性将查询转换为sql限制 我需要使用别名来限制,因为nhibernate源代码中的一行查找别名并从开始到别名获取子字符串
如果您没有提供别名,则显然无法

if (tagIds != null && tagIds.Count > 0)
            {
                StringBuilder attrXPath = new StringBuilder();

                for(int counter = 0;counter<tagIds.Count();counter++)
                {
                    attrXPath.Append("@id=\"");
                    attrXPath.Append(tagIds[counter]);
                    attrXPath.Append("\"");
                    if(counter < tagIds.Count() - 1)
                        attrXPath.Append(" or ");
                }

                query.UnderlyingCriteria
                    .Add(Restrictions.Eq(Projections.SqlProjection("tags.exist('/tags/tag[" + attrXPath.ToString() + "]') as XmlRestriction",
                                                                    new string[] { "XmlRestriction" },
                                                                    new IType[] { NHibernateUtil.String}), 1));
            }