检查EF中的XML列是否包含特定值
本文关键字:包含特 是否 EF 中的 XML 检查 | 更新日期: 2023-09-27 18:28:42
我有一个关于EF模型中的EF和XML列的问题。
我的项目中有一个搜索页面,里面有很多字段。我将我的价值观与代码相交:
IQueryable<ServicesRegistration> query = null;
using (SelfServiceEntities context = new SelfServiceEntities())
{
query = context.ServicesRegistrations.Include("BanStatusType").Where(c => c.AppID == "MyApp");
if (filter.RequestStatus != null)
{
if (query == null)
{
query = context.ServicesRegistrations
.Include("BanStatusType")
.Where(c => c.BanStatusType.StatusID == filter.RequestStatus);
}
else
{
query = query.Where(c => c.BanStatusType.StatusID == filter.RequestStatus);
}
}
}
这适用于所有简单的类型,如字符串、int等。
但当我尝试在XML列上进行这样的操作时,我会得到异常:
InnerException={"不允许从数据类型xml进行隐式转换到数据类型nvarchar,表"dbo.ServicesRegistrations",列"MetadataXml"。使用CONVERT函数运行此查询。"}
我的代码是:
if (!string.IsNullOrEmpty(filter.SerialNumber))
{
if (query == null)
{
query = context.ServicesRegistrations
.Include("BanStatusType").Where(c => c.MetadataXml.Contains(filter.SerialNumber));
}
else
{
query = query.Where(c => c.MetadataXml.Contains(filter.SerialNumber));
}
}
我使用的是Ef3.5,我知道其中XML数据的实现存在一些问题
有人能解决这样的问题吗?感谢
我想这是不允许的操作。第一个问题是EF不支持XML列。它将它们用作任何其他字符串列。因此,当您调用Contains时,它会将该方法转换为varchar列的SQL等效方法。显然,若不首先将XML列转换为varchar,数据库就不允许对其执行此操作。现在我们来谈谈最初的问题。因为EF看不到XML列,所以它无法在查询生成器中转换它。