嵌套 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方法的解决方案,反正都是暗地里用的