用LINQ查询xml字符串

问题描述 投票:0回答:1

我有一张这样的桌子

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函数来运行这个查询。

c# sql sql-server xml linq
1个回答
0
投票

你不能调用 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();
© www.soinside.com 2019 - 2024. All rights reserved.