I have got 2 tables - ReferrerSources with size of 50 rows and Referrer with size of 1.5 million rows.
Each Refferer entity has a link to corresponding ReferrerSource.
I just need to count number of Referrer's for each ReferrerSource:
public void CreateConvertionReportTest(DateTime from, DateTime to)
{
//.GetAll() returns IQueryable<T>. It's equal to Context.Set<T>().
var src = ContextManager.ReferrerSourceContext.GetAll();
var reff = ContextManager.ReferrerContext
.GetAll()
.Where(r => r.Created >= from && r.Created < to);
var info = src.GroupJoin(
reff,
(s) => s.Id,
(r) => r.ReferrerSourceId,
(s, or) => new
{
sorce = s.Name,
refferrersCount = or.Count()
}
);
foreach(var g in info)
Console.WriteLine("src: " + g + " : " + g.refferrersCount);
}
But this code causes a TimeoutException after an 30 seconds of execution.
I know, that simple SQL script can do that in a moment. What am i doing wrong?
GetAll()do? Have you profiled your SQL instance to see what queries is actually running? IfGetAll()returns something in memory, then you might be creating an n+1 query instead of executing in a single go.