我从下面的列表开始
List items = new List();
items.add(new Vehicle { MakeID = 1, MakeName = "Oldsmobile", ModelID = 2, ModelName = "98 Regency" });
items.add(new Vehicle { MakeID = 1, MakeName = "Oldsmobile", ModelID = 3, ModelName = "88 Delta" });
items.add(new Vehicle { MakeID = 1, MakeName = "Oldsmobile", ModelID = 4, ModelName = "Alero" });
items.add(new Vehicle { MakeID = 1, MakeName = "Oldsmobile", ModelID = 5, ModelName = "442" });
items.add(new Vehicle { MakeID = 2, MakeName = "Buick", ModelID = 11, ModelName = "Skylark" });
items.add(new Vehicle { MakeID = 2, MakeName = "Buick", ModelID = 13, ModelName = "Electra 225" });
items.add(new Vehicle { MakeID = 2, MakeName = "Buick", ModelID = 14, ModelName = "Regal" });
items.add(new Vehicle { MakeID = 2, MakeName = "Buick", ModelID = 16, ModelName = "Enclave" });但希望将其转换为以下格式:
List newList = new List();
items.add(new VehicleWithModelList { MakeID = 1, MakeName = "Oldsmobile", new List<Model> () { This list would contain the 4 oldsmobile models from above}});
items.add(new VehicleWithModelList { MakeID = 2, MakeName = "Buick", new List<Model> () { This list would contain the 4 buick models from above}});
public class Model {
public int ModelID { get; set; }
public string ModelName { get; set; }
}我有下面的linq来进行对象查询,但是我不断地收到语法错误,说明它在最后一个结束括号之前需要分号。
var newList = items.GroupBy(x => new {x.MakeID, x.ModelID, x.MakeName, x.ModelName}, (key, group) => new { MakeID = key.MakeID, MakeName = key.MakeName, ModelList = group.Select(z => new Model { ModelID = z.ModelID, ModelName = z.ModelName })).Cast< VehicleWithModelList >();实现这一目标的正确方法是什么?
发布于 2013-11-19 15:40:57
不如这样吧:
items.GroupBy(x => new { x.MakeID }).Select(x => new VehicleWithModelList
{
MakeID = x.First().MakeID,
MakeName = x.First().MakeName
Models = x.Select(x => new Model
{
ModelID = x.ModelID,
ModelName = x.ModelName
}).ToList()
});但是如果你给我们Model的类定义,那会有帮助
看起来,不需要按MakeID和MakeName进行分组- MakeID就足够了,除非出于某种原因,有可能使用不同MakeName的a MakeID。
发布于 2013-11-19 15:20:38
在下面标明的位置,你丢失了一个卷发支撑:
var newList = items.GroupBy(x => new
{
x.MakeID,
x.ModelID,
x.MakeName,
x.ModelName
},
(key, group) => new
{
MakeID = key.MakeID,
MakeName = key.MakeName,
ModelList = group.Select(z => new Model
{
ModelID = z.ModelID,
ModelName = z.ModelName
})
} // <---- Here
).Cast<VehicleWithModelList>();您只希望按MakeId和MakeName进行分组,否则您将为每个唯一的ModelId和ModelName获得不同的分组(这似乎不是查询的目标:
var newList = items.GroupBy(x => new { x.MakeId, x.MakeName });还可以通过直接选择VehicleWithModelList对象来丢失强制转换:
(key, group) => new VehicleWithModelList
{
MakeID = key.MakeID
... etchttps://stackoverflow.com/questions/20075272
复制相似问题