Следующий (урезанный) фрагмент кода представляет собой запрос 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».