繁体   English   中英

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

[英]Filter a query using value of XElement within XML using LINQ C#

使用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]'的表达式不是序列

那这个呢?

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 ,该Elements仅需要直接子代。 然后,我将其更改为“方法语法”而不是“表达式语法”,以使属于一起的事物保持在一起。 但是,您必须知道.First()可能不会导致任何元素,然后.Value将引发空引用异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM