LINQ到XML:创建元素属性和值的匿名对象 [英] Linq to XML: create an anonymous object with element attributes and values
问题描述
我是新来的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屋!