Вложенный запрос LINQ с использованием Contains с bigint - PullRequest
1 голос
/ 11 января 2009

Это SQL, который я хочу (ClearinghouseKey - это bigint):

select *
from ConsOutput O
where O.ClearinghouseKey IN (
  select distinct P.clearinghouseKey
  from Project P
  Inner join LandUseInProject L on L.ClearinghouseKey = P.ClearinghouseKey
  where P.ProjectLocationKey IN ('L101', 'L102', 'L103')
  and L.LandUseKey IN ('U000', 'U001', 'U002', 'U003')
)

Внутренний запрос прост и дает правильные результаты в LINQPad:

var innerQuery = (from p in Projects
                  join l in LandUseInProjects on p.ClearinghouseKey equals l.ClearinghouseKey
                  where locations.Contains(p.ProjectLocationKey) 
                  &&  (landuses.Contains(l.LandUseKey)) 
                  select new { p.ClearinghouseKey  }).Distinct();

Но внешний запрос выдает ошибку: Введите аргументы из ... Содержит .. Не может быть выведено из использования:

var returnQuery = from o in OperOutput
                  where (innerQuery).Contains(o.ClearinghouseKey)
                  select o;

Это потому, что ClearinghouseKey - это bigint? Есть ли другие способы написать этот запрос?

Спасибо, Жанна

1 Ответ

5 голосов
/ 11 января 2009

Не используйте анонимный тип:

select new { p.ClearinghouseKey })

Должно быть

select p.ClearinghouseKey)

Также рассмотрите возможность использования Any вместо Contains (у меня пока нет причин выбирать один над другим).

where innerQuery.Any(i => i == o.ClearinghouseKey)
...