Subsonic - 按XML列DataType过滤

时间:2009-11-30 10:06:31

标签: subsonic subsonic3

我已经下载了Subsonic 3.0.0.3,我的MSSQL数据库中有一个XML DataType。该属性以字符串形式返回,但是如何创建一行代码以按该列中的内容进行过滤。

如果我尝试类似from x in Table.All() where x.XMLColumn.Contains("test")之类的东西,它会抛出一个异常,因为虽然该属性是一个字符串,但是当它转换为SQL时上面会编译它对该列类型不正确。

2 个答案:

答案 0 :(得分:2)

有趣 - 我没有遇到过在DB调用中查询XML的问题,但我可以看到它是如何有用的。为了解决您的问题,我建议现在使用SPROC或使用简单查询工具,这样可以更好地明确。 http://subsonicproject.com/docs/Simple_Query_Tool

您还可以使用CodingHorror,它允许您编写自己的SQL(参数化) http://subsonicproject.com/docs/CodingHorror

答案 1 :(得分:2)

另一种选择是将属性值转换为对象,然后调用其ToString()方法。这会导致Subsonic linq提供程序将XMLColumn值显式转换为NVARCHAR(MAX)

from x in Table.All() where ((object)x.XMLColumn).ToString().Contains("test")

您需要强制转换,因为Linq提供程序在转换为SQL时会忽略String.ToString()方法调用。这是一种黑客行为,但确实解决了这个问题。