【发布时间】:2011-03-26 10:10:03
【问题描述】:
我正在尝试将下面的Roles 提取到IEnumerable<KeyValuePair<int, string>>
<PROJECT PROJECT_NO="161917">
<CONTACT CLIENT_ID="030423253272735482765C" CONTACT_NO="1">
<ROLE ROLE_ID="2" ROLE_DESC="ARCHITECT" />
<ROLE ROLE_ID="5" ROLE_DESC="INTEGRATOR" />
</CONTACT>
</PROJECT>
private static ProjectContact BuildProjectContactFromXml(XElement xml)
{
ProjectContact projectContact = new ProjectContact();
projectContact.ProjectId = SafeConvert.ToInt32(xml.Attribute("PROJECT_NO").Value);
projectContact.Roles = xml.Elements()
.First()
.Elements()
.Select(role => new KeyValuePair<int, string>(
SafeConvert.ToInt32(role.Attribute("ROLE_ID").Value),
role.Attribute("ROLE_DESC").Value));
return projectContact;
}
我的问题是关于延迟执行此 Linq 语句。据我了解,当我返回这个 ProjectContact 时,Linq 语句尚未执行。有没有办法强制执行这个语句,以便它发生在这个方法中,而不是当有人试图访问角色时?我想我可以通过调用 .Count() 来强制执行该语句,但似乎应该有更好的方法。
【问题讨论】:
-
抱歉,问题未完成,已发布!我会写完我的问题,一分钟 :)
-
Roles 是一个 IEnumerable
>,抱歉。 -
在 .NET 4 中,它们现在具有元组,因此我们不必再为这些东西创建键值对列表。新元组
(int value1, string value2) -
@Jimmy Hoffa,很酷,不知道,但我目前正在从事 3.5 项目。谢谢!
-
@Jimmy Hoffa:我相信语法实际上是
Tuple.Create(int value1, string value2)(从参数推断的类型没有指定)
标签: c# xml linq .net-3.5 deferred-execution