我从Regions
和Subregions
这两个表中获取数据。 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
的{{1}}。如果Subregions
没有Region
,则不会返回。我尝试了不同的方法,但无法使其正常工作
答案 0 :(得分:1)
为此您有不同的选择。袖手旁观,我可以想到这些:
a。从OP中的方法扩展手动联接
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()
}
b。利用实体映射
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
});
答案 1 :(得分:0)
这是如何获取所有Region和与这些Region相关联的子区域的方法。
List<Region> regions = context.Region.Include(r => r.SubRegions).ToList();
regions
将包含所有地区。列表中的每个地区都会包含其子地区。