我有一张这样的桌子
Table (Id decimal,XMLContent XML)
现在我想查询有特定Typethis的记录,这是我的代码。
public ActionResult Index(int? id,FormCollection frm)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ViewBag.FormId = id;
ViewBag.FormName = db.Forms.Find(id).Name ;
var xMLDatas = db.XMLDatas.Include(x => x.Form).Where(x=>x.FormId==id).AsQueryable();
foreach (string item in frm)
{
if (item.StartsWith("xml-") && !string.IsNullOrEmpty( Request.Form[item]))
{
string i = item.Replace("xml-", "");
string value = Request.Form[item];
xMLDatas = xMLDatas.Where(x => x.XMLContent.Contains("<" + i + "[^>]*>"+value+"</" + i + ">")).AsQueryable();
}
}
return View(xMLDatas.ToList());
}
但我在返回时得到了这个错误信息
不允许从数据类型xml隐式转换为数据类型nvarchar,表'dbo.XMLDatas',列'XMLContent'。使用convert函数来运行这个查询。
你不能调用 Contains("<" + i + "[^>]*>"+value+"</" + i + ">"))
关于 XMLContent
作为该列的sql类型是 XML
而不是 NVARCHAR
.
基本上,你可以调用 Contains
上的东西是一个字符串或被SQL Server隐式转换为字符串。
但你可以尝试在服务器端解决这个问题。试着先从DB中加载XML。
var xMLDatas = db.XMLDatas.Include(x => x.Form).Where(x=>x.FormId==id).ToList();