我从下面的列表开始
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
复制相似问题