В последнее время мы много работаем с LINQ, главным образом в смысле LINQ-to-Objects. К сожалению, некоторые из наших запросов могут быть немного сложными, особенно когда они начинают включать в себя несколько последовательностей. Трудно точно сказать, что происходит, когда вы получаете запросы, которые начинают выглядеть:
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?