从 Linq 中其他列表的项创建列表
本文关键字:列表 创建 其他 Linq | 更新日期: 2023-09-27 18:33:51
我有一个自定义汽车对象的列表List<Car>
.汽车类有两个属性"品牌名称"和"型号",定义如下。
public class Car
{
public string BrandName {get; set;}
public List<string> Models {get; set;}
}
"列表"对象的数据从 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"}};
提前谢谢..
这是一种带有SelectMany
和嵌套Select
的方法
var result = listCarObj.SelectMany(x => x.Models.Select(y => new { model = y,brand = x.BrandName }));
为什么不进行 linq 查询,在该查询中,从listCarObj
中选择每个对象,然后对于列表中的每个元素,获取所有模型并返回匿名类型?
像这样:
var obj = from p in listCarObj
from q in p.Models
select new {
brand=p.BrandName,
model = q
};
您可以使用 SelectMany 来展平您的Models
,然后像这样投影:
var result = listCarObj.SelectMany(x => x.Models,
(carObj, model) => new {
carObj.BrandName, model
});