Entity Framework LINQ - подзапрос с группировкой по - PullRequest
2 голосов
/ 26 июля 2010

Я пытаюсь выполнить запрос, который включает подзапрос, который сам включает в себя группирование.

Я основал свой код на ответах на этот вопрос

Целькод должен выполнить простую дедупликацию таблицы 'person' на основе адреса электронной почты и вернуть последнюю строку person.

var innerQuery = (from p in db.Person
                              join r in db.Registration on p equals r.Person
                              join e in db.EventDetail on r.EventDetail equals e
                              where e.Client.ClientID == clientID
                              group p by p.Email into g
                              select g.Max(p => p.PersonID));

var query = (from p2 in db.Person where innerQuery.Contains(p2.PersonID) select p2);

Когда попытка запроса выполняется, я получаю следующее сообщение об ошибке:

LINQ to Entities не распознает метод 'Boolean Contains [Int32] (System.Linq.IQueryable`1 [System.Int32], Int32)', и этот метод нельзя преобразовать ввыражение хранилища.

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

Любая помощь очень ценится.

1 Ответ

2 голосов
/ 26 июля 2010

Разве query не является просто объединением?

var query = from p2 in db.Person
            join iq in innerQuery on p2.PersonID equals iq
            select p2;

Я не уверен насчет = iq части, но обычно я не использую этот синтаксис, извините - в другой форме это будет

.Join(innerQuery, p2 => p2.PersonId, iq => iq, (p2, iq) => p2);

для объединения и выбора.

...