C# XDocument上低效的IEnumerable Select语句
我有下面的代码,它工作得很好。然而,我对使用“IEnumerable代码”还不熟悉,而且很明显,它可以做得更好 基本上,我希望XML中的所有区域节点,然后我希望在Asp:repeater中输出的数据在XML中嵌套得很深,但这4个字段都在同一级别C# XDocument上低效的IEnumerable Select语句,c#,C#,我有下面的代码,它工作得很好。然而,我对使用“IEnumerable代码”还不熟悉,而且很明显,它可以做得更好 基本上,我希望XML中的所有区域节点,然后我希望在Asp:repeater中输出的数据在XML中嵌套得很深,但这4个字段都在同一级别 var xDoc = xmlDoc.ToXDocument(); var jobs = xDoc.Descendants("Region") .Select(x => new { jobName = x.Element("
var xDoc = xmlDoc.ToXDocument();
var jobs = xDoc.Descendants("Region")
.Select(x => new {
jobName = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job").Element("JobName").Value,
jobType = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job").Element("JobType").Value,
jobURL = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job").Element("URL").Value,
jobClose = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job").Element("JobCLDate").Value
}
);
if (jobs.Count() > 0)
{
careersListing.DataSource = jobs;
careersListing.DataBind();
careersListing.Visible = true;
}
我将非常感谢任何关于使其更加简洁的反馈
谢谢
奈杰尔你说得对;这可能是低效的 您可以这样简化它:
var jobs = from x in xDoc.Descendants("Region")
let job = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job")
select new {
jobName = job.Element("JobName").Value,
...
};
如果您喜欢使用方法调用语法,可以传递声明临时变量的语句lambda表达式。您说得对;这可能是低效的 您可以这样简化它:
var jobs = from x in xDoc.Descendants("Region")
let job = x.Element("Location").Element("Department").Element("Brand").Element("Jobs").Element("Job")
select new {
jobName = job.Element("JobName").Value,
...
};
如果您喜欢使用方法调用语法,那么可以传递一个声明临时变量的语句lambda表达式。如果每个区域只有一个
Job
元素(似乎是这样),为什么不直接查询它呢
var jobs = xDoc.Descendants("Job")
.Select(x => new {
jobName = x.Element("JobName").Value,
jobType = x.Element("JobType").Value,
jobURL = x.Element("URL").Value,
jobClose = x.Element("JobCLDate").Value
}
);
另一个小优化:使用Any()
而不是Count()
:
如果每个区域只有一个
Job
元素(似乎是这样),为什么不直接查询它呢
var jobs = xDoc.Descendants("Job")
.Select(x => new {
jobName = x.Element("JobName").Value,
jobType = x.Element("JobType").Value,
jobURL = x.Element("URL").Value,
jobClose = x.Element("JobCLDate").Value
}
);
另一个小优化:使用Any()
而不是Count()
:
if(jobs.Count()>0)
可以重写为if(jobs.Any())
if(jobs.Count()>0)
可以重写为if(jobs.Any())