从 nhibernate 3.0 查询 xml 列

发布于 2024-12-08 05:33:49 字数 256 浏览 0 评论 0原文

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

提前谢谢你

I have a xml column in one of my entities
I mananged to use a user type and map this column to a property in my entity of type XmlElement.
I was wondering if I could query this object from the code like I do sql with QueryOver?
I found something like this here. But I don't understand exactly how to query it

Thank you in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泼猴你往哪里跑 2024-12-15 05:33:49

好吧,这就是我最终做到的
不是最简洁的代码
但无论如何...
我使用underlycriteria属性将queryover与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));
            }

well, this is how I did it evetually
not the preatiest code
but anyway ...
I combined the queryover with an sql restriction using the underlyingcriteria property
I needed to use a alias for the restriction because of a line in the nhibernate source code that looks for an alias and gets the substring from begining to the alias
If you don't provide an alias obviously it fails

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));
            }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文