我已经设计了这个例子,因为它是我试图解决的实际问题的一个容易消化的版本。这里是类和他们的关系。LINQ ToArray在这个例子中能返回一个强类型的数组吗?
首先,我们有一个Country类,它包含一个字符串索引的State对象字典(例如它们的名称或缩写)。 State类的内容是无关紧要的:
class Country
{
Dictionary<string, State> states;
}
class State { ... }
我们也有一个包含零个或多个BranchOffice对象也由国家名称或缩写收录的词典一类公司。
class Company
{
Dictionary<string, BranchOffice> branches;
}
class BranchOffice { ... }
我们正在使用的情况下,是一个国家目标和企业对象的数组:
Country usa;
Company companies[];
我要的是包含一个分支国家对象的数组。我写的LINQ如下。首先它抓住所有实际包含分支的公司,然后通过比较两个列表的关键字来加入状态列表。
问题是ToArray
返回一个匿名类型。我明白为什么匿名类型不能转换为强类型。我试图弄清楚我是否可以改变某些东西来取回强类型数组。 (并且我接受关于更好地写LINQ的建议)
我已经试过在所有的地方都投射到分支办公室(前面,在列表2,最后选择,以及其他不太可能候选人)。
BranchOffice[] offices =
(from cm in companies
where cm.branches.Count > 0
select new {
list2 =
(from br in cm.branches
join st in usa.states on br.Key equals st.Key
select st.Value
)
}
).ToArray();
你的'BranchOffice'类是什么样的? – BrokenGlass