LINQ选择并将Entites转换为ViewModels

dkn*_*ack 3 c# linq c#-4.0

我不是Linq的新手,但无论如何我无法解决这个问题.

可以说我有以下型号.显然这是样本模型.

public class Parent
{
    public int Id { get; set; }
    public List<Child> Children { get; set; }
    public DateTime CreateDate { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public List<Toys> Toys { get; set; }
    public DateTime CreateDate { get; set; }
}

public class Toys
{
    public string Id { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是将它们转换为ViewModels.这是我的ViewModel的定义方式

public class ParentViewModel
{
    public int Id { get; set; }
    public List<ChildViewModel> Children { get; set; }
}

public class ChildViewModel
{
    public int Id { get; set; }
    public List<ToysViewModel> Toys { get; set; }
}

public class ToysViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的问题

如何选择模型并将其转换为viewModels.这是我已经尝试过的.

var q = from p in dbContext.Parents
        where p.Id = 123
        select new ParentViewModel
        {
           Id = p.Id,
           Children = ???
        };
Run Code Online (Sandbox Code Playgroud)

如何获得儿童及其玩具清单?

提前致谢!

Jon*_*Jon 11

如果关系在数据库中正确建模,那么

select new ParentViewModel
{
   Id = p.Id,
   Children = p.Children.Select(c => new ChildViewModel {
       Id = c.Id,
       Toys = c.Toys.Select(t => new ToyViewModel { ... }).ToList()
   }).ToList()
};
Run Code Online (Sandbox Code Playgroud)