Итак, у меня есть функция, которая возвращает данные для использования в GridView. Требуется возраст для завершения (около 25 секунд). Я думаю, что я написал это очень плохо, и мне нужно оптимизировать его, чтобы он работал быстрее.Как я могу ускорить этот запрос Linq to SQL?
Это код:
var pingresult = from p in db.GetTable<tblTBHealthPing>()
group p by p.ComputerAsset into g
select g.OrderByDescending(t => t.HealthPingTime).FirstOrDefault();
var healthresult = from p in db.GetTable<tblTBHealthHeartbeat>()
group p by p.ComputerAsset into g
select g.OrderByDescending(t => t.HealthHeartbeatTime).FirstOrDefault();
var query = (from t in TrackingBoardPCs()
where t.TrackingGroup == groupName
select new TrackingComputer
{
ComputerName = t.ComputerAsset,
IPAddress = t.ComputerIP,
Location = t.Location,
Pingable = (from p in pingresult where p.ComputerAsset == t.ComputerAsset select p.HealthPingResult).FirstOrDefault() ?? false,
PingTime = (from p in pingresult where p.ComputerAsset == t.ComputerAsset select p.HealthPingTime).FirstOrDefault() ?? DateTime.Now.AddDays(-100),
Username = (from p in healthresult where p.ComputerAsset == t.ComputerAsset select p.HealthCurrentUser).FirstOrDefault(),
CurrentWindow = (from p in healthresult where p.ComputerAsset == t.ComputerAsset select p.HealthCurrentWindow).FirstOrDefault(),
Uptime = (from p in healthresult where p.ComputerAsset == t.ComputerAsset select p.HealthUptime).FirstOrDefault()
}).OrderBy(t => t.Pingable);
return query;
Там, наверное, лучший способ сделать это, а именно, сбросив первые два ВАР (pingresult и healthresult) и приведение их в на главном запросе каким-то образом, но у меня есть не знаю как. Любая помощь будет большой :)
Пытались ли вы оставили присоединиться на '' pingresult' и healthresult': увидеть что-то вроде этого: http://stackoverflow.com/questions/2323619/linq -to-sql-left-join-to-max-aggregate? Кстати, что такое 'TrackingBoardPCs'? «IQueryable»? –
Да, это IQueryable, то есть результат запроса LINQ to SQL –