Отношения многие ко многим в Entity Framework - PullRequest
1 голос
/ 14 марта 2019

Я получаю данные из 2 таблиц, Regions и Subregions. A Region может иметь множество Subregions, связанных RegionID.

Я хочу вернуть все Regions из базы данных и связанные с ними Subregions.

Я уже сделал это:

var RegionDet = (from s in context.Region
                 join b in context.SubRegion on s.RegionID equals b.RegionID
                 group b by s.RegionName into g
                 select new RegionsMV
                        {
                            RegionName = g.Key,
                            SubRegions = g.ToList()
                        }).ToList();

Это прекрасно работает, кроме того, что вернет только Regions, с которым Subregions связано. Если Region не имеет Subregion, он не будет возвращен. Я пробовал разные способы, но не могу заставить его работать как надо

Ответы [ 2 ]

1 голос
/ 14 марта 2019

У вас есть разные варианты для этого. С манжеты, я могу думать об этом:

а. Расширьте ручное соединение с заходом в ОП

from s in context.Region
join b in context.SubRegion on s.RegionID equals b.RegionID into bg
from b in bg.DefaultIfEmpty()
group b by s.RegionName into g
select new RegionsMV
{
    RegionName = g.Key,
    SubRegions = g.ToList()
}

б. Использовать сопоставление сущностей

public class Region 
{
    public int RegionID { get; set; }
    public string RegionName { get; set; }
    public ICollection<SubRegion> SubRegions { get; set; }
}

Тогда ваш запрос LINQ будет:

from s in context.Region.Include(r => r.SubRegions)
select new RegionsMV
{
    RegionName = s.RegionName,
    SubRegions = s.SubRegions
}

Или это эквивалентно:

context.Region.Include(r => r.SubRegions)
.Select(s => new RegionsMV()
{
    RegionName = s.RegionName,
    SubRegions = s.SubRegions
});
0 голосов
/ 14 марта 2019

Вот как можно выбрать все регионы и подрегионы, связанные с этими регионами.

List<Region> regions = context.Region.Include(r => r.SubRegions).ToList();

regions будет содержать все регионы. Каждый регион в списке будет содержать свои подрегионы.

...