Индивидуальное объединение и фильтрация в Linq - PullRequest
1 голос
/ 11 февраля 2010

Допустим, у меня есть две таблицы (Address и Phone) в sql, которые имеют отношение один к одному. Я создал соответствующие классы linq to sql и изменил ассоциацию на OneToOne

Я хочу получить оба объекта путем фильтрации дочернего объекта. например, у меня есть следующий запрос, который отлично работает:

var n = db.Addresses.Where(t => t.Phone.Number == 100);

Можно ли как-нибудь сделать следующую работу:

var n = db.Addresses.Where(t => t.Phone == new Phone(100));

Конструктор класса Phone выше инициализирует свойство Number. Как я вижу, запрос, который выдается, содержит предложение, которое фильтрует таблицу Phones по идентификатору (первичному ключу), но не входит в число.

Если я установил Number в качестве первичного ключа в Visual Studio, он включается в предложение where, но поиск все равно ничего не возвращает, поскольку значение параметра для id равно 0. Даже если это сработало, это не решение, так как Number не должен быть первичным ключом.

1 Ответ

1 голос
/ 11 февраля 2010

То, что вы спрашиваете, не имеет смысла. Если вы хотите, чтобы телефонный элемент давал адрес, у вас есть это, получая доступ к свойству Address.Phone.

Вы не можете инициализировать тип и использовать его для проецирования, так как это DLinq, где запрос транслируется вниз в БД. Вы можете сделать это на Linq для объектов, но это заставит вас перечислить ваш список, который извлечет всю информацию базы данных в память, что может не сказаться на производительности ...

Я не вижу здесь проблемы? У вас есть адрес, он работает, и вы можете получить доступ к свойству телефона, перейдя к свойству Address.

...