C# 用Linq写这篇文章的最佳方式

C# 用Linq写这篇文章的最佳方式,c#,linq,C#,Linq,我如何在LINQ中重构它。我正在努力接受良好的编码实践。我的tds对象如下所示: tds->BuildingName(列表)->buildingFloor(字符串) 我使用嵌套的foreach循环完成的是将buildingFloors读入一个列表 List<string> bname = new List<string>(); foreach (var building in tds) { foreach (var x in building.BuildingN

我如何在LINQ中重构它。我正在努力接受良好的编码实践。我的tds对象如下所示: tds->BuildingName(列表)->buildingFloor(字符串) 我使用嵌套的foreach循环完成的是将buildingFloors读入一个列表

List<string> bname = new List<string>();

foreach (var building in tds) {
    foreach (var x in building.BuildingName) {
        bname.Add(x);
    }
}
List bname=new List();
foreach(tds中的var建筑){
foreach(building.BuildingName中的变量x){
b名称加(x);
}
}

您要找的是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() ;
编辑:在我上下班的路上,我没有看到每个人的内心世界,的确如此

var bname = tds.SelectMany(x=> x.BuildingName).ToList();
你可以用它来压平你的物品

List<string> bname = tds.SelectMany(b => b.BuildingName).ToList();
List bname=tds.SelectMany(b=>b.BuildingName.ToList();
用于将列表展平,如:

List<string> bname = tds.SelectMany(r=> r.BuildingName).ToList();
List bname=tds.SelectMany(r=>r.BuildingName.ToList();
使用查询语法:

List<string> bname =
  (from building in tds
  from x in building.BuildingName
  select x)
  .ToList()
List bname=
(来自tds中的建筑)
从building.BuildingName中的x开始
选择x)
托利斯先生()

Linq与良好的编码实践有什么关系?你具体想做什么?你能用语言解释一下这段代码的作用吗?你试着把它翻译成Linq做了什么?我知道Linq要快一点,在大楼里面有一组建筑楼层,我正在将它们转换成一个列表。Linq通常也被认为更具可读性。不确定是谁否决了我,但是如果你能解释为什么我会非常感激,因为其他的答案都是相同的。这不会返回列表。我想SelectMany可能是更好的选择,这就是我在手机上阅读帖子的原因。SelectMany是正确的,我没有看到内部循环。我编辑了我的回答。纯粹出于好奇,你为什么使用'r'作为lambda变量?@JoePhilllips,自从我在2008/2009年开始使用LINQ以来,早期的例子有
r
,可能是为了记录在案,这就是为什么我一直使用这个。明白了。对我来说,使用“b”更有意义,因为该变量表示使用LINQ To SQL的建筑名称,我一直认为r的用法是“行”@joephillips,是的,我认为这个习惯来自早期使用LINQ To SQL,总有一天要克服它:)(当我通过调试器运行这一行时,我得到了bname当前上下文中不存在名称“bname”。是否替换了整个代码(包括创建列表)有了这个吗?
bname
是在之前的某个地方声明/创建的,与问题中的不完全一样吗?不,我希望这就是问题所在。您是从我的答案或其他地方在线得到错误的吗?