【发布时间】:2011-04-21 15:25:59
【问题描述】:
我有以下方法:
public string GetDepartmentTitle(string DepartmentAbbreviation) {
List<TaxonomyItem> Divisions = TaxonomyFromCMS.GetAllItems(DomainDataConstants.DivisionAndDepartment.TAXONOMY_ID);
List<TaxonomyItem> Departments = new List<TaxonomyItem>();
Divisions.ForEach(delegate(TaxonomyItem Division) {
Departments.AddRange(Division.SubTaxonomyItems);
});
TaxonomyItem Result = (from d in Departments
where d.Name == DepartmentAbbreviation
select d).FirstOrDefault();
return Result == null ? "" : Result.Title;
}
它首先读取所有的部门(只有 3 个),但这些部门在它们下面有许多部门作为子分类项目。目前我逐步遍历每个部门并提取每个部门并将它们放在一个名为部门的列表中。然后我使用 Linq 搜索特定项目。
效果很好,但我很想跳过/使用获取子项目的第一步。我尝试了以下似乎不起作用的行:
TaxonomyItem Result = (from d in Departments.SubTaxonomyItems
然后,我可能会通过某种 lambda,其中包含一个包含 yeild 语句的 Departments.SubTaxonomyItems 的 foreach。这可能是诀窍,但我无法让它发挥作用。查看 yeild 声明,如果我做一些扩展方法,似乎有办法。但我想看看它是否可以内联完成,就像下面的伪代码:
public string GetDepartmentTitle(string DepartmentAbbreviation) {
List<TaxonomyItem> Divisions = TaxonomyFromCMS.GetAllItems(DomainDataConstants.DivisionAndDepartment.TAXONOMY_ID);
TaxonomyItem Result = (from d in Divisions.ForEach(delegate(TaxonomyItem Division) {
yeild return Divison.SubTaxonomyItems;
}) AS Dps
where Dps.Name == DepartmentAbbreviation
select Dps).FirstOrDefault();
return Result == null ? "" : Result.Title;
}
这可能是这种方式还是我没有看到的其他方式?不用扩展方法也能做到吗?
【问题讨论】: