1

これは私が欲しい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();

しかし、外側のクエリではエラーが発生します: Type arguments from ...Contains.. can't be inferred from usage:

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

ClearinghouseKey が bigint であるためですか? このクエリを記述する他の方法はありますか?

ありがとう、ジャンヌ

4

1 に答える 1

5

匿名型を使用しないでください:

select new { p.ClearinghouseKey })

する必要があります

select p.ClearinghouseKey)

また、Contains の代わりに Any を使用することも検討してください (どちらかを選択する理由はまだありません)。

where innerQuery.Any(i => i == o.ClearinghouseKey)
于 2009-01-11T02:33:43.023 に答える