How to Select All with a One to Many Relationship Using Linq

.net, c#, entity-framework, linq, one-to-many

Solution

You could do another projection using `SubThings` navigation property:

things = _context.Things.OrderBy(b => b.Name)
.Select(b => new ThingViewModel
{
     Id = b.Id,
     Name = b.Name,
     SubThings =b.SubThings.Select(st=>new SubThingViewModel{Id =st.Id,...}).ToList()
}).ToList();

Problem

I have two tables: ``` CREATE TABLE Thing ( Id int, Name nvarchar(max) ); CREATE TABLE SubThing ( Id int, Name nvarchar(max), ThingId int (foreign key) ); ``` I want to select all Things with a listing of SubThings and set them to a ThingViewModel. The Thing ViewModel is simple: ``` public class ThingViewModel { public int Id { get; set; } public string Name { get; set; } public List<SubThingViewModel> SubThings { get; set; } } ``` The SubThingViewModel is: ``` public class SubThingViewModel { public int Id { get; set; } public string Name { get; set; } } ``` I already select the Thing records like this: ``` List<ThingViewModel> things = null; things = _context.Things.OrderBy(b => b.Name) .Select(b => new ThingViewModel { Id = b.Id, Name = b.Name }).ToList(); ``` How would I add the SubThings to the query and ViewModel?

Original source