0

次のテーブルがあり、すべてのセクターとそれに含まれるすべての AvailableResources を返したいと考えています。

Sector-AvailableResources データベースの図

これは通常、単に実行する場合です...

_dataContext.Sectors.Include(s=>s.AvailableResources);

...しかし、AvailableResources がリリースされていない (ReleasedOn が null 可能である) 場合、または ReleaseOn の日付が将来の場合にのみ、AvailableResources が必要です。

生のSQLでこれを行う唯一の方法は、AvailableResourcesのサブクエリに参加することだとほぼ確信していますが、IDbSetコレクションを使用してこれを行いたいです(EntiyFramework 5をラップします)。

4

1 に答える 1

0

LINQ でサブクエリを実行する方法を調べたところ、この回答が見つかりました。LINQ でサブクエリを実行する方法

そこから、これを試してみました...

var context = new CSSDbEntities();

context.Sectors.Include(x=> x.AvailableResources)
    .Where(x=> !x.AvailableResources.Any() || context.AvailableResources.Where(ar=> ar.SectorId == x.SectorId && ar.ReleasedOn == null).Any());

これはトリックを行うようです。を追加する!x.AvailableResources.Any()必要があります。または、INNER JOIN を実行したくなく、リソースを含むセクターのみを返します。

于 2013-04-30T12:03:53.007 に答える