다음 (줄이기) 코드 발췌문은 인이 손으로 만들어진 쿼리보다 느린 SQL (ToTraceString을 통해)을 생성하는 Linq-To-Entities 쿼리입니다. 나는 어리석은 짓을하고 있는가? 아니면 Linq-to-Entities가 질의를 최적화하는데 나쁜가?왜 LINQ-to-Entities에서 생성 된 SQL이 비효율적입니까?
XML 데이터 구조 (다른 모든 고통)를 작성하기 전에이를 실행해야하므로 쿼리 끝에 ToList()가 있습니다.
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"라는 내부 오류가 발생했습니다.
LINQ-to-Entities (예 : 조인 대신)에서 중첩 된 하위 쿼리 *를 권장하지 않습니까? http://blogs.msdn.com/esql/archive/2007/11/01/EntitySQL_5F00_Tip_5F00_1.aspx를 참조하십시오. – dommer