使用实体框架

时间:2016-08-17 13:32:06

标签: c# sql entity-framework

首先,这是我在论坛上的第一个问题所以请原谅我的任何写作错误。

我有4张桌子

attaching the table diagram

我想要的是获取吸引人名称加入'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();

1 个答案:

答案 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并不是那么糟糕,但是你应该考虑在实际使用它之前对其进行分析。