从EF返回位置层次结构

时间:2017-05-24 11:52:30

标签: c# entity-framework

我有3张表,你有所期望的正常关系,地区,区,位置。一个地方属于一个地区,一个地区属于一个地区。我把这3个表放到EF中,关系就在那里(Region表有一个属性到Districts表)。

鉴于关系已经存在,我正在寻找一个简单的查询,它将为每个表中的几个字段返回所有3个关系,所以我可以从我的web api返回:

[{
   "region": "0",
   "name": "Test"
   [{
      "district": "0"
      "name": "Flower"
         [{
            "location": "0",
            "name": "What"
         }]
   }]
},
{
  ...etc
}]

由于每个字段中都有很多字段,我是否必须在我自己的表中构建只有这些字段的关系,或者我只能从每个表中选择我想要的字段,同时保持与EF表的关系一个查询?理想情况下,我想在查询语法中执行此操作,因为我发现更自然。

1 个答案:

答案 0 :(得分:1)

我建议您选择所需的字段。

像:

var results = dbContext.Regions.Select(r => new RegionModel{
   Id = r.Id,
   Name = r.Name
   Districts = r.Districts.Select(d => new DistrictModel {
    .......
   })
});

我认为RegionModel和DistrictModel是一些数据传输对象,将用于上层抽象层(服务,控制器等)

您还可以使用AutoMapper使用QueryableExtensions将实体转换为DTO,这将根据您的配置自动为您选择。

<强> UPD:

您也可以使用LINQ查询语法:

var results = from r in dbContext.Regions select new RegionModel { 
    Id = r.Id, 
    Name = r.Name 
    Districts = from d in r.Districts select new DistrictModel {
     ...
    } 
});