Использование:
IQueryable<CHILD> result = query.SelectMany(t => t.Children);
Запрос возвращает все элементы сборки родительского объекта, потомки, на которые ссылаются несколько родителей, будут возвращаться несколько раз.
Для получения отдельных строк используйте - вы будетехотя для реализации пользовательской фильтрации необходимо реализовать класс, который реализует IComparer.Distinct()
будет смотреть на экземпляры, а не на значения.
IQueryable<CHILD> result = query.SelectMany(t => t.Children)
.Distict(new Comparer<CHILD>());
Distinct()
удаляет дубликаты из запроса.
В качестве альтернативы вы можете использовать группирование для создания группировки для детей:
IEnumerable<CHILD> result = query.SelectMany(t => t.Children)
.GroupBy(x => new CHILD {
id = x.id
// add other properties here
})
.Select(g => g.Key);
Вместо new CHILD { }
вы также можете использовать new { }
для создания анонимного результата, в этом случае вам следует заменить IEnumerable<CHILD>
на var
.
Для выполненияприведение типа в Linq, которое вы можете использовать - , хотя я предполагаю, что это не сработает в вашем случае :
someQuery.OfType<TypeToCastTo>().Cast<TypeToCastTo>();
OfType<T>()
фильтрует элементы так, что Cast<T>()
может выполнитьтип литой.