使用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]'的表达式 不是序列
答案 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
将抛出空引用异常。