带有空值的linq查询问题

时间:2010-10-30 10:09:48

标签: c# linq-to-xml

我正在尝试从xml获取值,而我的空值有问题。我正在使用此查询从属性“RODZ”获取所有非空值,并且此代码有效,但它也返回空值:/

 XDocument loaded = XDocument.Load(@"c:\TERC.xml");

 var q = (from c in loaded.Descendants("catalog")
                     from r in c.Descendants("row")
                     select r.Descendants("col").Where(col1 =>
                            col1.Attribute(XName.Get("name")).Value ==
                            "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0").ToList();

对我来说,这是一个很大的问题,因为我必须将所有值解析为int,并且此查询不起作用:

var q = (from c in loaded.Descendants("catalog")
                     from r in c.Descendants("row")
                     select int.Parse(r.Descendants("col").Where(col1 =>
                            col1.Attribute(XName.Get("name")).Value ==
                            "RODZ").Where(kc => kc.ToString() != "").FirstOrDefault().Value ?? "0")

                  ).ToList();

我想在值为null时得到0,因为我稍后将其转换为Enum。

你看到这段代码有什么用吗?

<?xml version="1.0" encoding="UTF-8" ?> 
 <teryt>
 <catalog name="Compix">
 <row>
    <col name="NAME">Name1</col> 
    <col name="ID"/>
    </row>
 <row>
    <col name="NAME">Name2</col> 
    <col name="ID">1</col> 
    </row>
 <row>
    <col name="NAME">Name3</col> 
    <col name="RODZ">2</col> 
    </row>  
</catalog>
</teryt>

1 个答案:

答案 0 :(得分:1)

你的问题在于:

 where(kc => kc.ToString() != "")

将其更改为:

 where(kc => !string.IsEmptyOrNull(kc.Value))