запрос xml строка с использованием LINQ - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть такая таблица

Table (Id decimal,XMLContent XML)

Теперь я хочу запросить записи, которые имеют c Введите это мой код

 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 для выполнения этого запроса.

1 Ответ

0 голосов
/ 27 апреля 2020

Вы не можете вызвать Contains("<" + i + "[^>]*>"+value+"</" + i + ">")) на XMLContent, так как тип sql для этого столбца - XML, а не NVARCHAR.

Обычно вы можете вызывать Contains для чего-то, что является строкой или неявно преобразуется в строку сервером SQL.

Но вы можете попытаться обойти это на стороне сервера. Попробуйте сначала загрузить XML из БД:

var xMLDatas = db.XMLDatas.Include(x => x.Form).Where(x=>x.FormId==id).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...