在SelectMany之后创建字典

时间:2017-06-07 21:31:56

标签: c#

我有类别和类别I18N:

public class Category {
  public Int32 Id { get; set; }    
  public virtual ICollection<CategoryI18N> CategoriesI18N { get; set; };    
}

public class CategoryI18N {
  public String LanguageCode { get; set; }
  public String Name { get; set; }   
}

我有以下问题:

IList<Category> categories = service.GetCategories();  

var result = categories.SelectMany(y => y.CategoriesI18N, (c, cI18N) => new { c, cI18N })

我希望结果为List<Dictionary<String, CategoryI18N>>,其中:
1 - 列表是类别列表;
2 - 字典值是每个CategoriesI18N中的Category,而密钥是每个CategoryI18N语言代码。

我应该如何在SelectMany之后执行此操作?

1 个答案:

答案 0 :(得分:1)

我认为你想要的是:

categories.Select(x=>x.CategoriesI18N.ToDictionary(y=>y.LanguageCode)).ToList()

Select意味着它会在每个catgegory的最终列表中输入一个条目。

然后,我们在ToDictionary属性上使用CategoriesI18N将类别转换为字典。我们传入一个简单的选择器来定义每个条目的键。由于我们没有为值提供选择器,因此它会将对象(即CategoriesI18N条目)作为字典中的值。

我不确定如何在CategoriesI18N对象中定义LanguageCode,因此您可能需要对其进行编辑。

请注意,我没有使用SelectMany - 这是因为它丢失了我们想要的信息,即类别。它会将所有CategoriesI18N放入一个列表中,这样就很难将其放入基于类别的列表中。