IQueryable Parent-Child - PullRequest
       1

IQueryable Parent-Child

2 голосов
/ 04 марта 2010

Мне нужно разыграть: IQueryable<PARENT> до IQueryable<Child>.

IQueryable<PARENT> query = GetParents();

IQueryable<CHILD> result = query.Select(t => t.Children);

Это не работает, невозможно преобразовать EntitySet в IQueryable. Спасибо

1 Ответ

0 голосов
/ 04 марта 2010

Использование:

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>() может выполнитьтип литой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...