LINQ到XML:创建元素属性和值的匿名对象 [英] Linq to XML: create an anonymous object with element attributes and values

查看:103
本文介绍了LINQ到XML:创建元素属性和值的匿名对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的LINQ和我试图查询XML文档,找到客户经理的名单为特定的用户。 (我知道这可能更有意义,把这个数据库或其他什么东西,但这种情况下要求一个XML文档)。

 <使用者emailAddress='user@fabrikam.com'>
    &LT;的AccountManager部门=客户服务标题='经理'&GT; manager@fabrikam.com< /的AccountManager&GT;
    &LT;的AccountManager部门='销售'标题=客户经理&GT; manager@fabrikam.com< /的AccountManager&GT;
    &LT;的AccountManager部门='销售'标题=客户经理&GT; manager@fabrikam.com< /的AccountManager&GT;
&LT; /使用者&gt;
 

我试图创建对象的列表(匿名类型?)与性能同时包含的XElement属性(部门,职务)和价值(电子邮件)。我知道,我可以得到两者中任选一种,但我的问题是选择两者。

下面是我尝试:

  VAR经理= _xDoc.Root.Descendants(用户)
               。凡(D =&GT; d.Attribute(EMAILADDRESS)值==user@fabrikam.com)
               .SelectMany(U =&GT; u.Descendants(的AccountManager)选择(A =&GT; a.value中));

的foreach(在经理VAR经理)
{
     //做的东西
}
 

我可以在 a.value中获取和 a.Attribute ,但我无法弄清楚如何获得两者的的它们存储在一个对象。我有一种感觉,将风看起来像:

 选择新{
    部门= u.Attribute(部)的价值,
    标题= u.Attribute(标题),价值,
    电子邮件= u.Value
};
 

解决方案

您是正确的。它看起来完全一样。

例如:

  _xDoc.Root.Descendants(用户)
          。凡(D =&GT; d.Attribute(EMAILADDRESS)值==user@fabrikam.com)
          .SelectMany(U =&GT; u.Descendants(的AccountManager))
          。选择(A =&gt;新建{
              部门= a.Attribute(部)的价值,
              标题= a.Attribute(标题),价值,
              电子邮件= a.value中
          });
 

修改:使用查询COM prehension语法:

 从u在_xDoc.Root.Descendants(用户)
其中,u.Attribute(EMAILADDRESS)。价值==user@fabrikam.com
从在u.Descendants(的AccountManager)
选择新{
               部门= a.Attribute(部)的价值,
               标题= a.Attribute(标题),价值,
               电子邮件= a.value中
           });
 

I'm new to Linq and I'm trying to query a XML document to find a list of account managers for a particular user. (I realize it might make more sense to put this in a database or something else, but this scenario calls for a XML document).

<user emailAddress='user@fabrikam.com'>
    <accountManager department='Customer Service' title='Manager'>manager@fabrikam.com</accountManager>
    <accountManager department='Sales' title='Account Manager'>manager@fabrikam.com</accountManager>
    <accountManager department='Sales' title='Account Manager'>manager@fabrikam.com</accountManager>
</user>

I trying to create a list of objects (anonymous type?) with properties consisting of both XElement attributes (department, title) and values (email). I know that I can get either of the two, but my problem is selecting both.

Here is what I'm trying:

var managers = _xDoc.Root.Descendants("user")
               .Where(d => d.Attribute("emailAddress").Value == "user@fabrikam.com")
               .SelectMany(u => u.Descendants("accountManager").Select(a => a.Value));

foreach (var manager in managers)
{
     //do stuff
}

I can get at a.Value and a.Attribute but I can't figure out how to get both and store them in an object. I have a feeling it would wind up looking something like:

select new { 
    department = u.Attribute("department").Value,
    title = u.Attribute("title").Value,
    email = u.Value
};

解决方案

You are correct. It would look exactly like that.

For example:

_xDoc.Root.Descendants("user")
          .Where(d => d.Attribute("emailAddress").Value == "user@fabrikam.com")
          .SelectMany(u => u.Descendants("accountManager"))
          .Select(a => new { 
              department = a.Attribute("department").Value,
              title = a.Attribute("title").Value,
              email = a.Value
          });

EDIT: Using query comprehension syntax:

from u in _xDoc.Root.Descendants("user")
where u.Attribute("emailAddress").Value == "user@fabrikam.com"
from a in u.Descendants("accountManager")
select new { 
               department = a.Attribute("department").Value,
               title = a.Attribute("title").Value,
               email = a.Value
           });

这篇关于LINQ到XML:创建元素属性和值的匿名对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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