Entity framework 访问子对象的计数';s的子属性

Entity framework 访问子对象的计数';s的子属性,entity-framework,model-view-controller,Entity Framework,Model View Controller,我有一个三级区,邮政编码和房屋。District包含一个虚拟的postalcodes列表,postal code类包含一个虚拟的场所列表,在District controller中是否有任何计算District中场所数量的方法,分类如下: public class District { [Key] public int DistrictID { get; set; } public string Name { get; set; } public int Ho

我有一个三级区,邮政编码和房屋。District包含一个虚拟的postalcodes列表,postal code类包含一个虚拟的场所列表,在District controller中是否有任何计算District中场所数量的方法,分类如下:

public class District
{
    [Key]
    public int DistrictID { get; set; }

    public string Name { get; set; }

    public int Households { get; set; }

    public int Population { get; set; }

    public virtual List<PostalCode> PostalCodes { get; set; }
}

public class PostalCode
{
    [Key]
    public int PostalCodeID { get; set; }                

    public string FullPostcode { get; set; }

    public bool InUse { get; set; }

    public decimal Latitude { get; set; }

    public decimal Longitude { get; set; }

    public int Easting { get; set; }

    public int Northing { get; set; }

    public string GridReference { get; set; }

    public string Ward { get; set; }

    public string Parish { get; set; }

    [Display(Name = "Introduced")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime Introduced { get; set; }

    [Display(Name = "Terminated")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? Terminated { get; set; }

    public int Altitude { get; set; }

    public string Country { get; set; }

    [Display(Name = "Last Updated")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? LastUpdated { get; set; }

    public string Quality { get; set; }

    public string LSOACode { get; set; }

    public bool Processed { get; set; }

    [Display(Name = "Last Visited")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? LastVisited { get; set; }

    public string SalesRep { get; set; }

    public virtual List<Premise> Premises { get; set; }

    public int? DistrictID { get; set; }
    public virtual District District { get; set; }
}

public class Premise
{
    [Key]
    public int PremiseID { get; set; }

    public string MPRN { get; set; }

    public string MeterPointAddress { get; set; }

    public string DUoSGroup { get; set; }

    public string MeterConfigurationCode { get; set; }

    public string MeterPointStatus { get; set; }

    public int PostalCodeID { get; set; }
    public virtual PostalCode PostalCode { get; set; }

    public bool Live { get; set; }

    public bool Pending { get; set; }
}

我想我可能已经能够使用@item.PostalCodes.All().Premises.Count()或其一些变体,但编译器不允许这样做,有没有任何方法可以从区域控制器内访问第三级Premises类?

您可以为此使用Include和2个foreach循环。看看


创建分部类区域,并向该分部类添加一对字段:


public partial class District
{
[NotMapped]
public int PostaCodeCount
[NotMapped]
public int PremissesCount
}
在控制器内尝试此查询:

var rowDistricts=db.Districts
 .Include(pc=>pc.PostalCodes)
        .ThenInclude(pr => pr.Premisses)
      .ToList();

var districts= new List<District>();
foreach (var item in rowDistricts)
{
         item.PostalCodeCount=item.PostalCodes.Count();
         item.PremissesCount=item.Premisses.Count();
         item.Premisses=null;
         item.PostalCodes=null;
           districts.Add(item);
}

return View(districts);
var rowDistricts=db.Districts
.包括(pc=>pc.PostalCodes)
.然后包括(pr=>pr.Premiss)
.ToList();
var districts=新列表();
foreach(行中的var项目)
{
item.PostalCodeCount=item.PostalCodes.Count();
item.PremisseCount=item.Premisses.Count();
item.Premisses=null;
item.PostalCodes=null;
加入(项目);;
}
返回视图(地区);

请显示从
DbContext
读取数据的代码。返回视图(db.Districts.ToList());这可能吗Connell?我想在district index视图上显示房屋的数量,所以这不是我真正想要的。我希望这在不使用for loop的情况下是可以实现的。我认为使用loop是一个简单的解决方案,但不管你想要什么
using (var context = new MyContext())
{
    var list = context.Customers.ToList();
    foreach (var customer in list)
    {
        Console.WriteLine("Customer Name: {0}", customer.Name);
        foreach (var customerInvoice in customer.Invoices)
        {
            var items=customerInvoice.Items.Tolist();
        }
    }
}

public partial class District
{
[NotMapped]
public int PostaCodeCount
[NotMapped]
public int PremissesCount
}
var rowDistricts=db.Districts
 .Include(pc=>pc.PostalCodes)
        .ThenInclude(pr => pr.Premisses)
      .ToList();

var districts= new List<District>();
foreach (var item in rowDistricts)
{
         item.PostalCodeCount=item.PostalCodes.Count();
         item.PremissesCount=item.Premisses.Count();
         item.Premisses=null;
         item.PostalCodes=null;
           districts.Add(item);
}

return View(districts);