короткая проблема
У нас есть лямбда-выражение, используемое в предложении Where, которое не возвращает ожидаемый результат.
краткое резюме
в объекте analysisObjectRepository есть определенные объекты, которые также содержат родительское отношение в свойстве с именем Parent. мы запрашиваем этот анализObjectRepository для возврата некоторых объектов.
подробнее
то, что должен сделать следующий код: возврат корня, первых детей (непосредственных детей) и внуков определенного объекта, содержащего значение ID.
в приведенном ниже коде, здравый смысл говорит, что все результаты, которые делают любое из трех отдельных условий OR истинным, должны возвращаться как в результатах.
List<AnalysisObject> analysisObjects =
analysisObjectRepository
.FindAll()
.Where(x => x.ID == packageId ||
x.Parent.ID == packageId ||
x.Parent.Parent.ID == packageId)
.ToList();
но приведенный выше код возвращает только детей и внуков, не возвращая корневые объекты (с нулевым родительским значением), которые делают
x.ID == packageId
условие true.
только объекты, которые делают второй
x.Parent.ID == packageId
и третий
x.Parent.Parent.ID == packageId
возвращаются.
Если мы только напишем код для возврата корневого объекта с приведенным ниже кодом, он будет возвращен, поэтому мы полностью уверены, что в анализе objectObjectRepository содержатся все объекты
List<AnalysisObject> analysisObjects =
analysisObjectRepository
.FindAll()
.Where(x => x.ID == packageId )
.ToList();
Однако, когда мы переписываем его как делегата, получаем ожидаемый результат, возвращая все ожидаемые объекты.
List<AnalysisObject> analysisObjects =
analysisObjectRepository
.FindAll()
.Where(delegate(AnalysisObject x)
{
return
(x.ID == packageId) ||
(x.Parent != null && x.Parent.ID == packageId) ||
(x.Parent != null &&
x.Parent.Parent != null &&
x.Parent.Parent.ID == packageId); })
.ToList();
Вопрос
Мы что-то теряем в выражении лямбда? это действительно простое условие 3 части ИЛИ, и мы думаем, что любой объект, который делает любое из трех условий истинным, должен быть возвращен. мы предположили, что корневой объект, имеющий нулевое родительское значение, может вызвать проблему, но не мог точно понять его.
любая помощь будет большой.