我有类别和类别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
之后执行此操作?
答案 0 :(得分:1)
我认为你想要的是:
categories.Select(x=>x.CategoriesI18N.ToDictionary(y=>y.LanguageCode)).ToList()
Select
意味着它会在每个catgegory的最终列表中输入一个条目。
然后,我们在ToDictionary
属性上使用CategoriesI18N
将类别转换为字典。我们传入一个简单的选择器来定义每个条目的键。由于我们没有为值提供选择器,因此它会将对象(即CategoriesI18N
条目)作为字典中的值。
我不确定如何在CategoriesI18N
对象中定义LanguageCode,因此您可能需要对其进行编辑。
请注意,我没有使用SelectMany
- 这是因为它丢失了我们想要的信息,即类别。它会将所有CategoriesI18N放入一个列表中,这样就很难将其放入基于类别的列表中。