Creating lists from another list's item in Linq
我有一个定制汽车对象的列表List。car类有两个属性"brandname"和"models",定义如下。
1 2 3 4 5
| public class Car
{
public string BrandName {get; set;}
public List<string> Models {get; set;}
} |
"list"对象的数据是从下面的API填充的。它返回近200行。为了便于说明,对象已用以下两项进行了实例化。对象从具有此结构的API返回,我无法控制数据的结构和发送方式。
1 2 3 4
| 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或具有以下格式数据的匿名类型的其他列表?
1 2 3 4
| 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"}}; |
提前谢谢……
- 我怀疑上述post op中的重复匹配要求给定子节点的"父节点",而不是父节点中的所有子节点。
- @Himbrombere,对,不是最好的含有SelectMany的复制品。那么这个怎么样?
- @我觉得Sinatr更合适。
这里是一个使用SelectMany和嵌套Select的方法
1
| var result = listCarObj .SelectMany(x => x .Models.Select(y => new { model = y,brand = x .BrandName })); |
为什么不做一个LINQ查询,从listCarObj中选择每个对象,并为列表中的每个元素获取所有模型并返回一个匿名类型?
类似:
1 2 3 4 5 6
| var obj = from p in listCarObj
from q in p .Models
select new {
brand =p .BrandName,
model = q
}; |
您可以使用selectmany将您的Models展平,然后按如下方式投影:
1 2 3 4
| var result = listCarObj .SelectMany(x => x .Models,
(carObj, model ) => new {
carObj .BrandName, model
}); |