【问题标题】:query xml string using LINQ使用 LINQ 查询 xml 字符串
【发布时间】:2020-04-27 13:04:20
【问题描述】:

我有一张这样的桌子

Table (Id decimal,XMLContent XML)

现在我想查询具有特定类型的记录 这是我的代码

 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】:

您不能在XMLContent 上调用Contains("&lt;" + i + "[^&gt;]*&gt;"+value+"&lt;/" + i + "&gt;")),因为该列的sql 类型是XML 而不是NVARCHAR

基本上,您可以对字符串或由 SQL Server 隐式转换为字符串的内容调用 Contains

但是您可以尝试在服务器端解决它。尝试先从数据库加载 XML:

var xMLDatas = db.XMLDatas.Include(x => x.Form).Where(x=>x.FormId==id).ToList();

【讨论】:

  • 我想查找 xml 标签,例如包含 bababa 该列表可以是真或假,而 bababa 是标准
  • @AbolfazlPourmohammad 如果不先将 XML 从数据库加载到服务器,您将无法做到这一点。
猜你喜欢
  • 2012-05-14
  • 1970-01-01
  • 2011-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多