使用LINQ C#在XML中使用XElement的值过滤查询

时间:2011-03-22 14:45:09

标签: c# linq

使用LINQ C#,我正在查询数据库表。该表有一个包含XML的列,我想根据XML中的元素值等于预定义的字符串来过滤结果。我使用以下查询:

(from data in DataObjects.Items
where data.DataItemTimeUtc < DateTime.UtcNow && 
data.DataItemXml.XDocument
   .Descendants("Items")
   .Descendants("MetaData")
   .Descendants("Device")
   .First().Value == "abc123"
orderby data.DataItemTimeUtc descending
select data).ToArray();

但它失败并出现错误:

  

类型'System.Collections.Generic.IEnumerable`1 [System.Xml.Linq.XElement]'的表达式   不是序列

1 个答案:

答案 0 :(得分:0)

这个怎么样?

var x = DataObjects.Items
 .Where(data => data.DataItemTimeUtc < DateTime.UtcNow
 && data.DataItemXml.XDocument
  .Elements("Items")
  .Elements("MetaData")
  .Elements("Device")
  .First().Value == "abc123")
 .OrderBy(data => data.DataItemTimeUtc);

我刚尝试删除您的语法错误,将Descendants更改为Elements,这只会影响直接的孩子。然后我将其更改为Method Syntax而不是Expression Syntax,以便将所有内容保存在一起。您必须注意,.First()可能不会产生任何元素,然后.Value将抛出空引用异常。