Linq Subquery Where Clause - PullRequest
       18

Linq Subquery Where Clause

2 голосов
/ 26 августа 2010

Мне нужна помощь с этим запросом linq. Это должно быть довольно просто, но это пинает мою задницу.

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

Подзапрос сам по себе выглядит следующим образом.

int pk = (from c in context.PtApprovedCertifications
         where c.FkosParticipant == 112118 &&
         (!excludedActionTypes.Contains(c.FkMLSosCodeActionType)) &&
         c.EffectiveDate <= DateTime.Now &&
         c.FkptApprovedCertificationVoidedBy == null
         orderby c.EffectiveDate descending,c.PK descending
         select c.PK).FirstOrDefault();

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

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

IQueryable<PtAMember> result = (from p in context.PtAMembers
    where (p.FkptACertification == (from c in context.PtApprovedCertifications
        where c.FkosParticipant == p.PtApprovedCertification.OsParticipant.PK &&
        (!excludedActionTypes.Contains(c.FkMLSosCodeActionType)) &&
        c.EffectiveDate <= DateTime.Now &&
        c.FkptApprovedCertificationVoidedBy == null
        orderby c.EffectiveDate descending, c.PK descending
        select c.PK).FirstOrDefault()) &&
            (p.LastName.ToLower().Contains(param.ToLower()) ||
            p.FirstName.ToLower().Contains(param.ToLower()) ||
            p.SocialSecurityNumber.Contains(param))
    select p).Distinct().OrderBy(PtAMembers => PtAMembers.LastName).ThenBy(PtAMember => PtAMember.FirstName);

Это приводит к ошибке. Любая помощь в решении этой головоломки будет принята с благодарностью.

Спасибо!

1 Ответ

1 голос
/ 26 августа 2010

Как насчет того, чтобы превратить ваш подзапрос в функцию поиска:

Func<int, int> pkLookup = n => (from c in context.PtApprovedCertifications
                      where c.FkosParticipant == n &&
                      (!excludedActionTypes.Contains(c.FkMLSosCodeActionType)) &&
                      c.EffectiveDate <= DateTime.Now &&
                      c.FkptApprovedCertificationVoidedBy == null
                      orderby c.EffectiveDate descending,c.PK descending
                      select c.PK).FirstOrDefault();

и затем использовать это в основном запросе.

...