使用列表平展字典并返回自定义 IEnumerable

本文关键字:返回 自定义 IEnumerable 字典 列表 | 更新日期: 2023-09-27 18:30:58

我有以下数据结构:

Dictionary<int, List<Home>> localDictionary;
Dictionary key here is the CityId of int type
public class Home
{
   public int Id;
   public string Address;
   public string Color;
}
//Following is the Output entity:
public class HomeOutput
{
   public int CityId;
   public int Id;
   public string Address;
   public string Color;
}

HomeOutput类型集合形式的最终结果将需要扁平化结构,因为对于每个城市,它都需要迭代主页列表并填充HomeOutput对象

我可以使用 foreach 循环轻松做到这一点,方法是首先迭代键然后List<Home>并将所有详细信息添加到HomeOutput集合中,但无法使用 Linq SelectMany 获得正确答案,以下是我尝试过的:

List<HomeOutput> homeOutputList =
    localDictionary.SelectMany(
        x => x.Value.SelectMany<Home, HomeOutput>(
            y => new HomeOutput()
            {
                CityId = x.Key,
                Id = y.Id,
                Address = y.Address,
                Color = y.Color
            }))
        .ToList();

错误是我正在尝试将HomeOutput转换为IEnumerable<HomeOutput>,但是我应该修改什么以确保我可以获得具有正确结果的集合。

使用列表平展字典并返回自定义 IEnumerable

我相信你的LINQ可能会稍微偏离。这应该有效。

List<HomeOutput> homeOutputList =
    localDictionary.SelectMany(
        x => x.Value.Select(
            y => new HomeOutput()
            {
                CityId = x.Key,
                Id = y.Id,
                Address = y.Address,
                Color = y.Color
            }))
        .ToList();