объект плоского списка в поле зрения

#c# #entity-framework #linq

#c# #entity-framework #linq

Вопрос:

Я пытаюсь преобразовать эти данные в viewmodel, но я не уверен, как это сделать. Приведенный ниже пример — это тип данных, с которыми я работаю. У него есть список объектов с другим списком объектов, и он должен выровнять ListOfCarModel и построить viewmodel. Любая помощь была бы отличной.

 static void Main(string[] args)
{
    try
    {
        List<carmake> carmakes = new List<carmake>();
        List<carmodel> carmodel = new List<carmodel>();
        carmodel.Add(new carmodel() { Modelid = 1, Model = "S60" });
        carmodel.Add(new carmodel() { Modelid = 2, Model = "A4" });
        carmodel.Add(new carmodel() { Modelid = 3, Model = "A4s" });
        carmakes.Add(new carmake() { Makeid = 1, MakeName = "Volvo",ListOfCarModel= carmodel });

        List<carmodel> carmodel2 = new List<carmodel>();
        carmodel2.Add(new carmodel() { Modelid = 4, Model = "535d" });
        carmodel2.Add(new carmodel() { Modelid = 5, Model = "320d" });
        carmodel2.Add(new carmodel() { Modelid = 6, Model = "M5" });
        carmakes.Add(new carmake() { Makeid = 2, MakeName = "BMW",ListOfCarModel= carmodel2 });

        List<carmodel> carmodel3 = new List<carmodel>();
        carmodel2.Add(new carmodel() { Modelid = 4, Model = "Passat" });
        carmodel2.Add(new carmodel() { Modelid = 5, Model = "dd" });
        carmodel2.Add(new carmodel() { Modelid = 6, Model = "aaa" });
        carmakes.Add(new carmake() { Makeid = 3, MakeName = "VW", ListOfCarModel = carmodel3 });

        var listOfCars = carmakes.Select(x => new CarViewModel
        {
            Model = x.MakeName,
            //MakeName = x.ListOfCarModel.SelectMany(x.ListOfCarModel)
        });.ToList()


    }
    catch (Exception ex)
    {
        ex.ToString();
    }
}

class carmake
{
    public int Makeid { get; set; }
    public string MakeName { get; set; }

    public List<carmodel> ListOfCarModel { get; set; }
}
class carmodel
{
    public int Modelid { get; set; }
    public string Model { get; set; }

}
class CarViewModel
{
    public string MakeName { get; set; }
    public string Model { get; set; }
}
 

}

Ответ №1:

Попробуйте это:

 List<CarViewModel> viewModels = new List<CarViewModel>();
foreach (var make in carmakes)
    foreach (var model in make.ListOfCarModel)
        viewModels.Add(new CarViewModel() { MakeName = make.MakeName, Model = model.Model });
 

Или, если вы хотите использовать LINQ:

 List<CarViewModel> viewModels = carmakes
    .Select(carmake => carmake.ListOfCarModel.Select(x => new CarViewModel() { MakeName = carmake.MakeName, Model = x.Model }))
    .SelectMany(x => x)
    .ToList();