Я ищу элегантное решение для объединения детской коллекции в коллекцию в одну большую коллекцию. Моя проблема в том, что некоторые дочерние коллекции могут быть пустыми.C# LINQ SelectMany по умолчанию
EG:
var aggregatedChildCollection = parentCollection.SelectMany(x=> x.ChildCollection);
Это бросает исключение если какой-либо из объектов сбора ребенок не может быть пустым. Некоторые альтернативы:
// option 1
var aggregatedChildCollection = parentCollection
.Where(x=>x.ChildCollection != null)
.SelectMany(x => x.ChildCollection);
// option 2
var aggregatedChildCollection = parentCollection
.SelectMany(x => x.ChildCollection ?? new TypeOfChildCollection[0]);
И будет работать, но я делаю определенную операцию на очень немногих детских коллекций на родителей, и она становится немного unweilding.
Я хотел бы создать метод расширения, который проверяет, является ли коллекция нулевым, и если это делает то, что делает опция 2 - добавляет пустой массив. Но мое понимание Func не в такой ситуации, когда я знаю, как кодировать этот метод расширения. Я знаю, что синтаксис, я хотел бы, как это:
var aggregatedChildCollection = parentCollection.SelectManyIgnoringNull(x => x.ChildCollection);
Есть простой метод расширения, что бы это сделать?
Отличное решение - в моем случае я объединил его с ответом Кори Нельсона, который использует 'Enumerable.Empty()' вместо того, чтобы вырезать нулевые коллекции, чтобы у меня всегда была как минимум пустая коллекция. –
DenverCoder9
Это также работает, но помните, что Кори связан с кодом, который имеет лицензию, поэтому вам нужно будет указать атрибуцию. – DavidG