查找的XElement根据属性值 [英] Find XElement by Attribute value

查看:1739
本文介绍了查找的XElement根据属性值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有IEnumerables的集合,每个人都有对应于我的业务对象的不同属性不同的属性值。下面是我查询对XML的示例:

 < SimpleData NAME =拉链> 60004< / SimpleData>
  < SimpleData名=名与GT;阿灵顿高地< / SimpleData>
  < SimpleData NAME =状态> IL< / SimpleData>
  < SimpleData NAME =countyname>&COOK LT; / SimpleData>
  < SimpleData NAME =纬度> 42.1121336684356< / SimpleData>
  < SimpleData NAME =经度> -87.9736682731814< / SimpleData>

我觉得我linq2xml拉姆达接近(搜索MSDN和SO后),但我似乎无法调整它恰到好处:

 字符串的cityName = simpleData.Where(A =方式> a.Attribute(name)的值==名)选择(A => a.value中)。的ToString();

的cityName获得的分配给System.Linq.Enumerable + WhereSelectEnumerableIterator`2 [System.Xml.Linq.XElement,System.String],而不是阿灵顿高地的价值

有什么建议?谢谢


解决方案

 字符串的cityName =(simpleData.Where(A =方式> a.Attribute(name)的值== 名称)
                  。选择(A => a.value中)。)FirstOrDefault();

 (从simpleData点¯x
其中,x.Attribute(名称)。价值==名
选择x.Value).FirstOrDefault()

返回一个的IEnumerable<串> (LINQ扩展方法几乎总是返回集合,而不是单一实例)包含其所有的元素值名称属性等于名称。然后,我们占据第一位,或如果是空的。

另外,XML是可怕的,应该被枪毙。

I have a collection of IEnumerables and each one has a different attribute values that corresponds to a different property on my business object. Here is a sample of the XML that I am querying against:

  <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>

I think my linq2xml lambda is close (after searching MSDN and SO) but I can't seem to tweak it just right:

string cityName = simpleData.Where(a => a.Attribute("name").Value == "name").Select(a => a.Value).ToString();

The value of cityName get's assigned to "System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]" instead of ARLINGTON HEIGHTS

Any suggestions? Thanks

解决方案

string cityName = (simpleData.Where(a => a.Attribute("name").Value == "name")
                  .Select(a => a.Value)).FirstOrDefault();

or

(from x in simpleData
where x.Attribute("name").Value == "name"
select x.Value).FirstOrDefault()

which returns an IEnumerable<string> (Linq extension methods almost always return collections and not single instances) containing all element values whose name attribute equals name. Then we take the first one, or null if its empty.

Also, that XML is horrendous and should be shot.

这篇关于查找的XElement根据属性值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆