Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XDocument上低效的IEnumerable Select语句_C# - Fatal编程技术网

C# XDocument上低效的IEnumerable Select语句

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

我有下面的代码,它工作得很好。然而,我对使用“IEnumerable代码”还不熟悉,而且很明显,它可以做得更好

基本上,我希望XML中的所有区域节点,然后我希望在Asp:repeater中输出的数据在XML中嵌套得很深,但这4个字段都在同一级别

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