我想从xml文档中存储一个特定元素的值,这些值是我从数据库中检索的(当且仅当xml文档具有它时)到一个int列表中。
我已经开始尝试这样做了(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的List中,然后尝试以这种方式查询它?我可以这样做,但我更愿意只在一个查询中完成所有操作。
我试图根据我看到的其他一些问题来做这件事:
select messages.MessageXML.Element("IDThatIWant")
但是我一直收到一条错误,指出'string'不包含Element的定义。如果它是我缺少的命名空间,我不确定它是哪一个。
感谢任何帮助!
答案 0 :(得分:1)
您可以在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>();