Entity Framework LINQ - подзапрос с группировкой по

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

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

Цель кода - выполнить простое дедупликацию таблицы «человек» на основе адреса электронной почты и вернуть строку с последним человеком.

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)», и этот метод нельзя преобразовать в выражение хранилища.

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

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


person ptutt    schedule 26.07.2010    source источник


Ответы (1)


Разве 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);

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

person Rup    schedule 26.07.2010
comment
Работает, если настроить: от p2 в db.Person join iq in innerQuery на p2.PersonID равняется iq select p2 Спасибо. - person ptutt; 26.07.2010