Скажите, что у меня есть таблица A, в которой много таблиц B. Таблица B имеет только одну таблицу A.Как фильтровать коллекцию коллекции в linq?
Теперь скажите, что таблица B имеет свойство Name. Как я могу сделать следующее в linq.
Получить все таблицы А, где таблица B имеет имя == «боб», то получите всю таблицу Б в таблице А.
Пример
Table B
Name TableA_Id
bob 1
bob 1
bob 1
jim 1
jon 2
Так что, если я бы запрос я хотел бы одну таблицу Объект назад с тремя объектами таблицы B внутри него.
Я попытался
session.Query<TableB>().where(x => x.Name == "bob").select(x => x.TableA)
session.Query<TableA>().where(x => x.TableB.where(d => d.Name == "bob") // can't do this since it is a collection
Я не могу сделать что-либо из них, поскольку это либо не компилировать или возвращает Для многих TableA (я думаю), что дает мне неожиданные результаты.
Я только использовал EF и не NHibernate, так что я не буду отправлять это как ответ, так как это предположение, но вы можете сделать: '.Query (). Где (a => a.TableB.Any (b => b.Name == "bob")) '? –
Ocelot20
Хм, похоже, это сработало (по-прежнему нужно его проверить). Может быть, я неправильно понял Любые, когда я проверил это и подумал, что если будет найден один результат, что все вернется. – chobo2
Правильно - если найден один результат (данный A имеет любое значение TableB.Name == "bob"), он будет включен. Все A без TableB с именем «bob» будут отброшены. –