C# Linq查询where子句返回null
这是我试图获取标记元素Posted\u Status的XML文件,Posted\u Status已经准备就绪C# Linq查询where子句返回null,c#,xml,linq,linq-query-syntax,C#,Xml,Linq,Linq Query Syntax,这是我试图获取标记元素Posted\u Status的XML文件,Posted\u Status已经准备就绪 <?xml version="1.0" encoding="utf-8"?> <Server> <Network> <---Network is the parent element <Posted_Status id="10">Ready</Posted_Status> <
<?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>
这将执行或调用查询,并显示标记值等于“就绪”的Posted\u Status
XML标记中的所有值
foreach(字符串exp到期)
{
对于(int i=0;i
您不需要在where
子句中强制转换为字符串,还需要将其与如下值进行比较
where exp.Element("Posted_Status").Value == "Ready"
尝试:
对于输出:
foreach (var item in expiration)
{
Console.WriteLine("Timed_On: {0} \r\nTimed_Off: {1}", item.Timed_On, item.Timed_Off );
}
(如果您将值解析为一个属性
DateTime
对象,效果会更好)您的来自和其中读取元素(“已发布状态”)
根据更新的问题进行编辑,应该是:
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;
您必须先读取根元素。然后遍历所有“网络”并检查“发布状态”值
这将返回符合条件的所有“网络”元素出于某种原因,它返回空值仍然可能是我调用或执行查询的方式或something@Habib他是不是缺少了ToList()来获得结果?@EhsanUllah,不是真的,当使用foreach
循环进行迭代时,它会执行(迭代)查询。XElement
定义cast操作符,以适当的格式返回值
;除了不区分大小写之外,你和OP所做的没有什么真正的区别。@Habib现在这对我来说是新的。我将发布main,main的定义如下:XElement main=XElement.Load(fi.FullName);它仍然是空的,它需要从该元素中准备好值,但我希望查询在接收之前验证该值。您可以发布整个XML文件吗?我更改了查询,它可能会让您更好地了解我要做的事情,这只会给我提供网络值,如果发布的状态有一个值为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,
};
foreach (var item in expiration)
{
Console.WriteLine("Timed_On: {0} \r\nTimed_Off: {1}", item.Timed_On, item.Timed_Off );
}
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;