[英]Access count of related records of an entity Entity Framework
我有两个模型:
public class HouseType
{
public int Id { get; set; }
public string TypeName { get; set; }
public virtual IEnumerable<HouseModel> HouseModels { get; set; }
}
和
public class HouseModel
{
public int Id { get; set; }
public string ModelName { get; set; }
[DisplayFormat(DataFormatString = "{0:n2}")]
public double StandardPrice { get; set; }
[ForeignKey("HouseType")]
public int HouseTypeID { get; set; }
public virtual HouseType HouseType { get; set; }
public virtual IEnumerable<HouseUnit> HouseUnits { get; set; }
}
我返回的是JSON结果,因此按预期,我无法在视图中进行操作,因为显示是由我制作的javascript文件处理的。
我正在尝试检索HouseModel
包含的HouseType
。 我努力了:
db.HouseTypes.Select(h => new
{
HouseCount = h.HouseModels.Count()
}).ToList();
但是实体框架对此有所抱怨。 如何访问实体中相关记录的数量? 任何帮助都感激不尽。 谢谢。
采用
public virtual ICollection<HouseUnit> HouseUnits { get; set; }
代替
public virtual IEnumerable<HouseUnit> HouseUnits { get; set; }
希望这可以帮助。
简单地说,麻烦在于EF试图在数据库服务器上执行.Select()
语句,但是,当然,数据库服务器不知道如何创建新对象。
您首先需要带回计数, 然后创建您的对象,这样类似的事情应该可以更好地工作:
var listOfCounts = db.HouseTypes
.Select(h => h.HouseModels.Count())
.ToList()
.Select(c => new
{
HouseCount = c
})
.ToList();
在此示例中,当执行第一个.ToList()
,数据库仅需要返回一组数字(每个HouseType中的HouseModels的计数),那么我们在本地内存中就有一个List<int>
,我们可以使用第二条Select语句。
作为旁白...
这不是您最初的问题的一部分,但也许您想考虑使用词典而不是列表,因此您可以通过某种方式来确定每种HouseType属于哪些HouseModels? 在这种情况下,我们可以执行以下操作:
Dictionary<int,string> houseModelCounts = db.HouseTypes
.ToDictionary(h => h.Id, h => h.HouseModels.Count());
这将给出一个以HouseType Id为键的字典,其中包含每种类型中HouseModels的计数值。 我不知道您的情况,所以也许对您来说不必要?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.