MVC3, .NET4.5, EF6.1, SQL Server 2008 SP2를 사용하고 있습니다. 분명히Foreach 명령에서이 LINQ/EF 쿼리가 여러 번 실행됩니까?
foreach (var item in Model.myOrder.OrderBy(r =>r.Supplier.CompanyType.SortOrder).ThenBy(r => r.SortOrder).ThenBy(r => r.Date).ThenBy(r => r.Id).ToList())
{
<tr>
<td>@item.Id</td>
<td>@item.Supplier.Name</td>
<td>@item.Date</td>
</tr>
}
내가 inmemory 주위를 반복 한 번만 DB를 조회 할 수있는 LINQ 쿼리, 다음의 Foreach 명령을 원하는 :
나는 테이블을 빌드 내보기에, 다음과 같은 라인을 가지고 수집. 내 추적에서이 foreach 단계는 예상보다 오래 걸리는 것처럼 보입니다. 반복 당 약 250ms입니다.
쿼리가 DB를 반복 할 때마다 반복 될 수 있다고 생각합니까? 그렇다면 DB에 한 번 치게 할 수 있습니다. Foreach 성명서에서 .tolist()를 사용하면 열정적 인로드가 필요하다고 생각했습니다.
감사합니다. 난 그냥이 내 코드를 변경 한 것처럼
편집
내 의심이 올바른지 확실하지 않다 : EF6 +에서
var myItems = Model.myOrder.OrderBy(r =>r.Supplier.CompanyType.SortOrder).ThenBy(r => r.SortOrder).ThenBy(r => r.Date).ThenBy(r => r.Id).ToList();
foreach (var item in myItems)
{
<tr>
<td>@item.Id</td>
<td>@item.Supplier.Name</td>
<td>@item.Date</td>
</tr>
}
내가 확인할 것 중 하나는 속성 중 일부가 지연로드 된 것입니다. 실제 쿼리는 O (1) 스타일 쿼리 일 수 있지만 지연이있는 경우 O (N + 1) 쿼리로 끝날 수 있습니다. – Zipper
@Zipper를 이용해 주셔서 감사합니다. foreach 문에서 LINQ 쿼리가 존재할 수있는 N + 1 문제를 제외하고 DB에 대해서만 한 번 실행된다는 것을 다른 사용자가 확인할 수 있습니까? – SamJolly