Следующий (сокращенный) фрагмент кода представляет собой запрос Linq-To-Entities, который приводит к SQL (через ToTraceString), который на намного медленнее, чем запрос, созданный вручную. Я делаю что-то глупое или Linq-to-Entities просто плохо оптимизирует запросы?
У меня есть ToList () в конце запроса, так как мне нужно выполнить его, прежде чем использовать его для построения структуры данных XML (что было совсем другой болью).
var result = (from mainEntity in entities.Main
where (mainEntity.Date >= today) && (mainEntity.Date <= tomorrow) && (!mainEntity.IsEnabled)
select new
{
Id = mainEntity.Id,
Sub =
from subEntity in mainEntity.Sub
select
{
Id = subEntity.Id,
FirstResults =
from firstResultEntity in subEntity.FirstResult
select new
{
Value = firstResultEntity.Value,
},
SecondResults =
from secondResultEntity in subEntity.SecondResult
select
{
Value = secondResultEntity.Value,
},
SubSub =
from subSubEntity in entities.SubSub
where (subEntity.Id == subSubEntity.MainId) && (subEntity.Id == subSubEntity.SubId)
select
new
{
Name = (from name in entities.Name
where subSubEntity.NameId == name.Id
select name.Name).FirstOrDefault()
}
}
}).ToList();
Работая над этим, у меня также есть некоторые реальные проблемы с датами. Когда я просто попытался включить возвращенные даты в свою структуру данных, я получил внутреннюю ошибку "1005".