首先,这是我在论坛上的第一个问题所以请原谅我的任何写作错误。
我有4张桌子
我想要的是获取吸引人名称加入'tblattraction'和'tblattractionmaster'以及使用'locationid'从'tblattractions'计算每个地方的确切吸引力的列表,我使用实体框架但不知道如何要做到这一点,
声明: 每个位置可以包含多个位置 每个地方都可以包含多个景点
我尝试了什么
return context.tblLocationMasters.Select(t => new details()
{
locationid = t.LocationId,
locationname = t.LocationName,
attractions =t.tblPlaces.SelectMany(a => a.tblAttractions).Select(b => new attractions(){
AttractionName=b.tblAttractionMaster.attractionname//(Not working),
TotalAttractions=0//???
}).ToList()
}).ToList();
答案 0 :(得分:0)
我使用Code First重新创建了您的模型(略有不同)。我提出了以下结构:
public class Location
{
public int LocationId { get; set; }
public string LocationName { get; set; }
public ICollection<Place> Places { get; set; }
}
public class Place
{
public int PlaceId { get; set; }
public string PlaceName { get; set; }
public int LocationId { get; set; }
public Location Location { get; set; }
public ICollection<AttractionPlace> Attractions { get; set; }
}
public class Attraction
{
public int AttractionId { get; set; }
public string AttractionName { get; set; }
}
public class AttractionPlace
{
public int AttractionPlaceId { get; set; }
public int PlaceId { get; set; }
public Place Place { get; set; }
public int AttractionId { get; set; }
public Attraction Attraction { get; set; }
}
然后,我可以通过以下查询以您需要的方式获得结果:
var query = (from loc in db.Locations
join pla in db.Places.Include(x => x.Attractions) on loc.LocationId equals pla.LocationId
let count = pla.Attractions.Count()
select new
{
loc.LocationId,
loc.LocationName,
Attractions = pla.Attractions.Select(z => new
{
pla.PlaceName,
z.AttractionId,
z.Attraction.AttractionName
}),
AttractionsByPlaceCount = count
});
上述查询会返回此format
中的数据只是旁注:我没有进一步看到此查询的效果。 Linq生成的SQL并不是那么糟糕,但是你应该考虑在实际使用它之前对其进行分析。