Linq查询where子句返回null
本文关键字:返回 null 子句 where 查询 Linq | 更新日期: 2023-09-27 18:25:37
这是我试图获取标记Element Posted_Status的XML文件,其中Posted_State已准备好
<?xml version="1.0" encoding="utf-8"?>
<Server>
<Network> <---Network is the parent element
<Posted_Status id="10">Ready</Posted_Status>
<Timed_On id="10">7/28/2013 9:32:10 AM</Timed_On>
<Timed_Off id="10">8/28/2013 9:32:10 AM</Timed_Off>
</Network>
</Server>
我遇到了一个问题,linq查询返回null。我正在尝试查询一个XML元素。元素名称为Posted_Status
。标签值为"就绪"。我正在尝试获取标记Posted_Status
,其中Posted_Status等于"Ready"。
// Query's the tag where the tag equals Ready
IEnumerable<XElement> expiration =
from exp in main.Elements("Posted_Status")
where (string)exp.Element("Posted_Status").Value == "Ready"
select exp;
这将执行或调用查询,并显示Posted_Status
XML标记中的所有值,其中标记值等于"Ready"。
foreach (string exp in expiration)
{
for (int i = 0; i < IntializedPostStat.Count(); i++)
{
IntializedPostStat[i] = exp.ToString();
lstIntializations.Items.Add("[Posted_Status]......"
+ IntializedPostStat[i].ToString());
break;
}
}
您不需要在where
子句中强制转换为字符串,还需要将其与等Value进行比较
where exp.Element("Posted_Status").Value == "Ready"
尝试:
var expiration =
from exp in main.Elements("Network")
where exp.Element("Posted_Status").Value.Equals("Ready", StringComparison.CurrentCulture)
select
new
{
Timed_On = exp.Element("Timed_On").Value,
Timed_Off = exp.Element("Timed_Off").Value,
};
对于Ouput:
foreach (var item in expiration)
{
Console.WriteLine("Timed_On: {0} 'r'nTimed_Off: {1}", item.Timed_On, item.Timed_Off );
}
(如果将值解析为属性DateTime
对象会更好)
您的from
和where
都读取Element("Posted_Status")
。
根据更新的问题进行编辑,这应该是:
XElement main = XDocument.Load(fi.FullName).Element("Server");
var expiration = from exp in main.Elements("Network")
where exp.Element("Posted_Status").Value == "Ready"
select exp;
您必须先读取根元素。然后迭代所有"网络"并检查"Posted_Status"值
这将返回所有符合条件