Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ遍历对象树_C#_Linq - Fatal编程技术网

C# 使用LINQ遍历对象树

C# 使用LINQ遍历对象树,c#,linq,C#,Linq,一个国家有一个州的名单。一个州有一个城市列表。查找拥有邮政编码为11201的城市的州 我该怎么做 当我这样做的时候 Country.States.SelectMany( s => s.Cities.Where(c => c.Zip ==11201) ) .Select(s => s); 我得到的是城市而不是国家 Count

一个国家有一个州的名单。一个州有一个城市列表。查找拥有邮政编码为11201的城市的州

我该怎么做

当我这样做的时候

Country.States.SelectMany(
                           s => s.Cities.Where(c => c.Zip ==11201)
                         )
                          .Select(s => s);
我得到的是城市而不是国家

Country.States.Where(s => s.Cities.Any(c => c.Zip == 11201));
正如Benjamin Grunbaum所指出的,如果要检索一个状态(而不是列表),请将
Where
替换为
FirstOrDefault

Country.States.FirstOrDefault(s => s.Cities.Any(c => c.Zip == 11201));

就颜色而言,另一种方法是:

var foo = 
    from state in Country.States
    from city in state.Cities
    where city.Zip == 11201  // Hey, that's my zip code!
    select state;
var justTheOne = foo.FirstOrDefault();

+请注意,OP要求“the”state,您应该将Where替换为FirstFYI-两个示例中的右括号都丢失了。我更正了您对“States”的拼写;也许这就是问题的原因?许多城市都有不止一个邮政编码。你的模型是如何反映这一点的?此外,海军舰艇有邮政编码,但没有州;你在乎吗?