C# 实体框架相关记录的访问计数
我有两种型号:C# 实体框架相关记录的访问计数,c#,asp.net-mvc,entity-framework,linq,C#,Asp.net Mvc,Entity Framework,Linq,我有两种型号: public class HouseType { public int Id { get; set; } public string TypeName { get; set; } public virtual IEnumerable<HouseModel> HouseModels { get; set; } } 但实体框架对此表示不满。如何访问实体内相关记录的计数?任何帮助都将不胜感激。谢谢。简单地说,问题是EF试图在db服务器上执行.
public class HouseType
{
public int Id { get; set; }
public string TypeName { get; set; }
public virtual IEnumerable<HouseModel> HouseModels { get; set; }
}
但实体框架对此表示不满。如何访问实体内相关记录的计数?任何帮助都将不胜感激。谢谢。简单地说,问题是EF试图在db服务器上执行
.Select()
语句,但当然,db服务器不知道如何创建新对象
您首先需要恢复计数,然后创建对象,这样做会更好:
在本例中,当执行第一个.ToList()
时,db只需要返回一组数字(每个房屋类型中房屋模型的计数),然后我们在本地内存中有一个列表
,我们可以使用第二个Select语句从中创建对象
作为旁白
这不是你原来的问题的一部分,但也许你想考虑一个字典而不是一个列表,所以你有一些方法来识别哪些户籍属于每个房型?在这种情况下,我们可以这样做:
字典houseModelCounts=db.HouseTypes
.ToDictionary(h=>h.Id,h=>h.HouseModels.Count());
这将提供一个用HouseType Id键入的字典,其中包含每个类型中的HouseModels计数的值。我不知道你的背景,所以可能对你来说没有必要?使用
public virtual ICollection<HouseUnit> HouseUnits { get; set; }
公共虚拟ICollection HouseUnits{get;set;}
而不是
public virtual IEnumerable<HouseUnit> HouseUnits { get; set; }
public虚拟IEnumerable HouseUnits{get;set;}
希望这有帮助。您遇到了什么错误?(您可能需要
db.HouseTypes.Include(“HouseModels”)。选择(..
它说指定类型成员不受支持linq…
@Stephenmueckek你能用icollection而不是ienumerable来尝试吗?@FrebinFrancis把它作为一个答案发布出来。效果很好。Than ks.@Cyval把它作为一个答案发布。谢谢!你能解释一下为什么吗?@Cyval最好检查一下这个链接
var listOfCounts = db.HouseTypes
.Select(h => h.HouseModels.Count())
.ToList()
.Select(c => new
{
HouseCount = c
})
.ToList();
public virtual ICollection<HouseUnit> HouseUnits { get; set; }
public virtual IEnumerable<HouseUnit> HouseUnits { get; set; }