簡體   English   中英

從數據庫獲取Xml字段,然后從特定元素獲取值

[英]Get Xml field from database, then get value from a particular element

我想將我從數據庫中檢索的xml文檔中的特定元素的值(如果且僅當xml文檔具有)存儲到一個整數列表中。

我已經開始嘗試這樣做(messages.MessageXML是SQL Server數據庫中的Xml類型):

    List<int> messageXml = (from messages in dbContext.Messages
                               join transactions in dbContext.Transactions
                               on messages.TransactionID equals transactions.TransactionID 
                               where transactions.CreatedOn >= StartDate
                               && transactions.CreatedOn <= EndDate
                               select messages.MessageXML
                               ).ToList();

我想在一個LINQ查詢中做到這一點,還是需要將messages.MessageXML放入XmlDocuments / Strings列表中,然后嘗試以這種方式查詢它? 我可以做到,但我寧願只在一個查詢中完成所有操作。

我嘗試根據其他已看到的其他問題來執行此操作:

select messages.MessageXML.Element("IDThatIWant")

但是我不斷收到錯誤消息,指出“字符串”不包含Element的定義。 如果它是我缺少的名稱空間,則不確定是哪個名稱空間。

任何幫助表示贊賞!

您可以在select子句中動態創建和取消引用XML-Linq,如下所示:

select XElement.Parse(messages.MessageXML).Element("IDThatIWant")

但是,要分離SQL和XML並包括限制(僅當元素具有屬性時),將類似於:

var messageXml = from messages in dbContext.Messages
                           join transactions in dbContext.Transactions
                           on messages.TransactionID equals transactions.TransactionID 
                           where transactions.CreatedOn >= StartDate
                           && transactions.CreatedOn <= EndDate
                           select messages.MessageXML;

var messages = from m in messageXml select XElement.Parse(m);

var ids = (from msg in messages
            let id = msg.Attribute("IDThatIWant")
            where !String.IsNullOrEmpty(id) 
            select Convert.ToInt32(id)).ToList<int>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM