我有一个IEnumerable集合,每个集合都有不同的属性值,这些值对应于我的业务对象上的不同属性。以下是我正在查询的XML示例:
<SimpleData name="zip">60004</SimpleData>
<SimpleData name="name">ARLINGTON HEIGHTS</SimpleData>
<SimpleData name="state">IL</SimpleData>
<SimpleData name="countyname">COOK</SimpleData>
<SimpleData name="lat">42.1121336684356</SimpleData>
<SimpleData name="lon">-87.9736682731814</SimpleData>
我认为我的linq2xml lambda表达式已经接近正确(在搜索MSDN和SO之后),但我似乎无法完全调整好它:
string cityName = simpleData.Where(a => a.Attribute("name").Value == "name").Select(a => a.Value).ToString();
cityName的值被分配给"System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]",而不是ARLINGTON HEIGHTS。
有什么建议吗?谢谢。
(string)Attribute("name")
,而不是Attribute("name").Value
——两者几乎相同,但前者会先进行空值检查。由于当一个元素上不存在指定名称的属性时,Attribute()
方法将返回null
,所以当前写法中第一个找不到属性的元素将引发NullReferenceException
异常。 - Pavel Minaev<order1>...</order1><order2>...</order2>...
这样的宝石。或者像<name_of_entity_encoded_in_tag>...</name_of_entity_encoded_in_tag>
这样? - Pavel Minaev