嵌套 foreach 作为 LINQ 与链式链表
nested foreach as LINQ with chained linked List
我有一个列表中的列表。我只需要列表中的一个值,并且可以使用嵌套的 foreach 获得我的结果,但我想使用某种 LINQ 查询。
我的代码:
var myCity = from c in CountryLists
select (from city in c.stateList
where city.name == passedInValue
select city.name).FirstorDefault();
这个 returns myCity 作为某种列表,所有值都为 null EXCEPT 找到匹配项的位置。
我不想通过城市列表来查找名称。我怎么能在 myCity 中只有一个值;为空或所需名称?
先用SelectMany
压平列表,再用FirstOrDefault
过滤:
CountryList.SelectMany(c => c.stateList).FirstOrDefault(d => d.Name == passedInValue);
请注意,因为 FirstOrDefault
可以采用谓词,所以您实际上不需要 Where
子句。
使用 SelectMany 怎么样:
var city = CountryLists
.SelectMany(x => x.stateList)
.FirstOrDefault(x => x.name == passedInValue);
你可以像其他人指出的那样使用 SelectMany
(我自己更喜欢这个解决方案),但是如果你喜欢查询语法,你可以使用多个 from
子句(检查MSDN documentation 更多示例):
var city = (from c in CountryLists
from city in c.stateList
where city.name == passedInValue
select city.name).FirstOrDefault();
相当于SelectMany
方法的解决方案,反正都是暗地里用的
我有一个列表中的列表。我只需要列表中的一个值,并且可以使用嵌套的 foreach 获得我的结果,但我想使用某种 LINQ 查询。
我的代码:
var myCity = from c in CountryLists
select (from city in c.stateList
where city.name == passedInValue
select city.name).FirstorDefault();
这个 returns myCity 作为某种列表,所有值都为 null EXCEPT 找到匹配项的位置。
我不想通过城市列表来查找名称。我怎么能在 myCity 中只有一个值;为空或所需名称?
先用SelectMany
压平列表,再用FirstOrDefault
过滤:
CountryList.SelectMany(c => c.stateList).FirstOrDefault(d => d.Name == passedInValue);
请注意,因为 FirstOrDefault
可以采用谓词,所以您实际上不需要 Where
子句。
使用 SelectMany 怎么样:
var city = CountryLists
.SelectMany(x => x.stateList)
.FirstOrDefault(x => x.name == passedInValue);
你可以像其他人指出的那样使用 SelectMany
(我自己更喜欢这个解决方案),但是如果你喜欢查询语法,你可以使用多个 from
子句(检查MSDN documentation 更多示例):
var city = (from c in CountryLists
from city in c.stateList
where city.name == passedInValue
select city.name).FirstOrDefault();
相当于SelectMany
方法的解决方案,反正都是暗地里用的