우리는 최근에 LINQ와 Object 간의 의미에서 주로 LINQ로 많은 작업을 해왔습니다. 유감스럽게도 검색어 중 일부는 약간 복잡 할 수 있습니다. 특히 여러 시퀀스를 조합하여 사용하기 시작하면 더욱 그렇습니다. 당신처럼 보이기 시작 쿼리를 얻을 때, 무슨 일을 정확히 알려 어려울 수 있습니다 :LINQ 쿼리 디버깅
IEnumerable<LongType> myCompanies = relevantBusiness.Children_Companies
.Select(ca => ca.PR_ContractItemId)
.Distinct()
.Select(id => new ContractedItem(id))
.Select(ci => ci.PR_ContractPcrId)
.Distinct()
.Select(id => new ContractedProdCompReg(id))
.Select(cpcr => cpcr.PR_CompanyId)
.Distinct();
var currentNewItems = myCompanies
.Where(currentCompanyId => !currentLic.Children_Appointments.Select(app => app.PR_CompanyId).Any(item => item == currentCompanyId))
.Select(currentId => new AppointmentStub(currentLic, currentId))
.Where(currentStub=>!existingItems.Any(existing=>existing.IsMatch(currentStub)));
Items = existingItems.Union(newItems).ToList();
등 등 ...
디버깅 경우에도, 말할 어려울 수 있습니다 누가 언제 무엇을하고 있는지. 불필요하게 "ToList"를 호출하여 시퀀스를 더 쉽게 조사 할 수있는 방법을 찾지 못하면 "복잡한"LINQ를 디버깅하는 방법에 대한 좋은 제안이 있습니까?
+1 LINQ 혼란을 리팩터링합니다. –
진심으로 동의합니다. LinqToObjects를 사용하면 체인의 각 단계에서 실제로 작업하고 검사 할 객체를 얻을 수 있습니다. 식 평가가 끝날 때까지 지연되는 LinqToSQL과 달리 LinqToObjects의 확장 메서드는 다른 메서드와 마찬가지로 작동하며 즉시 평가됩니다. – tvanfosson
LINQ to Object 쿼리는 Deferred 평가도 사용합니다. 하지만 디버깅하는 동안 그들을 평가할 수 있습니다. –