我有一个自定义汽车对象List<Car>
的列表。汽车类有两个属性'BrandName'和'Models',如下所述。
public class Car
{
public string BrandName {get; set;}
public List<string> Models {get; set;}
}
“List”对象的数据从API填充,如下所示。它返回接近200行。为了便于说明,该对象已经实例化了两个项目,如下所示。使用此结构从API返回对象,我无法控制数据的结构和发送方式。
List<Car> listCarObj = new List<Car>(){
new Car(){ BrandName = "Mercedes", Models = new List<string>(){"Class A", "Class E"}},
new Car(){ BrandName = "BMW", Models = new List<string>(){"X Series", "E Series"}}
}
如何使用Linq将此列表转换为IEnumerable或其他具有以下格式数据的匿名类型的列表?
var obj = new[] {new {brand = "Mercedes", model = "Class A"},
new {brand = "Mercedes", model = "Class E"},
new {brand = "BMW", model = "X Series"},
new {brand = "BMW", model = "E Series"}};
提前致谢..
答案 0 :(得分:5)
这是一种使用SelectMany
和嵌套Select
var result = listCarObj.SelectMany(x => x.Models.Select(y => new { model = y,brand = x.BrandName }));
答案 1 :(得分:4)
为什么不进行linq查询,从中选择listCarObj
中的每个对象,对于列表中的每个元素,获取所有模型并返回匿名类型?
类似的东西:
var obj = from p in listCarObj
from q in p.Models
select new {
brand=p.BrandName,
model = q
};
答案 2 :(得分:3)
您可以使用SelectMany展平Models
,然后将其投影为: -
var result = listCarObj.SelectMany(x => x.Models,
(carObj, model) => new {
carObj.BrandName, model
});