我有一张超过一百万行的大桌子。
简单:
public partial class Country
{
public Country()
{
this.Streets = new HashSet<Streets>();
}
public int Id { get; set; }
public virtual ICollection<Street> Streets { get; set; }
}
public partial class Street
{
public int Id { get; set; }
public int CountryId { get; set; }
public virtual Country Country { get; set; }
}
如果我想获得一个国家的街道总数,我可以做到
context.CountryStreets.Count(v=>v.CountryId == X)
EF为您提供了一种使用延迟加载访问相关表的简便方法:
Country.Streets.Count()
这种方法非常简单但是......由于某种原因,它正在加载总相关表。
为什么呢?我怎样才能改变这种行为?
提前致谢
答案 0 :(得分:0)
看看这两个链接,它们可能有助于解决您的问题:
How to COUNT rows within EntityFramework without loading contents?
答案 1 :(得分:0)
为什么呢?
因为它不是为此目的而制作的。
我该如何改变这种行为?
你真的不能 - 只有你开始搞乱表达提供者。
注意:
如果我们检索50条记录并且在每一行上我们都会“计数”,那么我们将向MSSQL发出超过50条(!)的请求,结果是非常糟糕的。
最好的解决方案是做这样的事情:
ct.Country.Select(v => new { Country = v, TotalStreets = v.Streets.Count() });
请注意,只有一个请求。