在 Linq 中编写此内容的最佳方式

本文关键字:最佳 方式 Linq | 更新日期: 2023-09-27 18:31:07

如何在 LINQ 中重构它。我正在努力接受良好的编码实践。我的 tds 对象如下所示: tds -> 建筑物名称(列表) ->建筑物楼层(字符串)我使用嵌套的foreach循环完成的是将建筑物楼层读取到列表中。

List<string> bname = new List<string>();
foreach (var building in tds) {
    foreach (var x in building.BuildingName) {
        bname.Add(x);
    }
}

在 Linq 中编写此内容的最佳方式

你可以

SelectMany来做,这将使你的项目变平

List<string> bname = tds.SelectMany(b => b.BuildingName).ToList();

使用 Enumerable.SelectMany 扁平化列表,如下所示:

List<string> bname = tds.SelectMany(r=> r.BuildingName).ToList();

你要找的是SelectMany。

var bname = buildings.SelectMany(b => b.BuildingName);

请注意,如果您要使用 foreach 多次枚举结果,那么您可能希望 ToList() 它,因此您有一个硬列表,而不是每次枚举时都会执行的可枚举列表。

var bname = buildings.SelectMany(b => b.BuildingName).ToList();
我想是

这样的:

var bname = tds.SelectMany(x => x.BuildingName);

如果您需要列表,请在最后调用.ToList()

var bname = tds.Select( x=> x.buildingName).ToList() ;

编辑:我在上下班途中没有看到内心的foreach,确实是

var bname = tds.SelectMany(x=> x.BuildingName).ToList();

使用查询语法:

List<string> bname =
  (from building in tds
  from x in building.BuildingName
  select x)
  .ToList()