начинающий Linq синтаксис и EF4 вопрос - PullRequest
0 голосов
/ 08 января 2011

Вопрос

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

Данные1 клиент с 2 адресами и 1 клиент с 1 адресом.

Запрос возвращает 3 строки клиентов, каждый с 1 адресом

  • Клиент 1 => Адрес1
  • Клиент 1 => Адрес2
  • Клиент 2 => Адрес3

    var query = from t1 in context.Clients.Where(specification.SatisfiedBy()).Include("ClientAddresses")
                join t2 in context.ClientAddresses.Where(spec.SatisfiedBy())
                on t1.ClientKey equals t2.ClientKey
                select t1;
    

Мои ожидания были немного больше похожи на список с двумя клиентами,один клиент с набором из двух адресов и один клиент с набором из одного адреса.

  • Клиент 1 => Адрес1 / Адрес2
  • Клиент 2 => Адрес3

Чего мне не хватает ???

Спасибо!

1 Ответ

1 голос
/ 08 января 2011

вы пробовали что-то вроде: query = query.Distinct();?

Возможно, вам придется раскрыть, как написаны спецификации, чтобы дать больше данных.

Например, я не понимаю, почему ваш запрос не похож на:

var query = from t1 in context.Clients.Include("ClientAddresses")
            where specification.SatisfiedBy() &&
                t1.ClientAddresses.Any(spec.SatisfiedBy())
            select t1;

Обновление

Посмотрите, работает ли это. Не уверен, сколько из этого поддерживается EF. Это очень похоже на ваш оригинальный запрос

var query = (from t1 in context.Clients.Where(specification.SatisfiedBy())
                 .Include("ClientAddresses")
             from t2 in context.ClientAddresses.Where(spec.SatisfiedBy())
             where t1.ClientKey == t2.ClientKey
             select t1)
            .Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...