2017-05-17 1 views
-1

私は、これらの部分に関連するPartIdsとAccountIdsのリストを持つテーブルを持っています。この表には、PartId/AccountIdペアリングが排他的クラブ(IsInExclusiveClub)のメンバーであるかどうかを判断するブール値があります。質問する方法と同じテーブルから存在する、Linqを使用してエンティティへ

私は、表を照会して、排他的クラブに所属していないクラブと排他的なクラブに属していない両方のPartId/AccountIdペアを見つけることができます。排他的なクラブにいるため

:ここ

は、私がこれを行うために書かれている2つのSQLクエリです専用クラブから除外されるための

DECLARE       @ForeignPassedInKey int; set @ForeignPassedInKey = [Some Integer] 

SELECT      DISTINCT p.PartId 
FROM      dbo.Part p 
WHERE      IsInExclusiveClub = 1 
AND      EXISTS(SELECT * FROM dbo.Parts p2 
            WHERE p.partid = p2.partid 
            AND p2.Account IN (SELECT AccountId FROM dbo.Accounts 
                   WHERE ForeignPassedInKey = @ForeignPassedInKey) 
            AND p2.IsInExclusiveClub = 1) 

DECLARE       @ForeignPassedInKey int; set @ForeignPassedInKey = [Some Integer] 

SELECT      DISTINCT p.PartId 
FROM      dbo.Part p 
WHERE      IsInExclusiveClub = 1 
AND      NOT EXISTS(SELECT * FROM dbo.Parts p2 
            WHERE p.partid = p2.partid 
            AND p2.Account IN (SELECT AccountId FROM dbo.Accounts 
                   WHERE ForeignPassedInKey = @ForeignPassedInKey) 
            AND p2.IsInExclusiveClub = 1) 

Linqをエンティティに使用するとどうすればよいでしょうか。さらに詳しい情報が必要な場合はお知らせください。

+0

あなたの終了をEXISTS /「クエリと外部クエリは、彼らのように見えるが存在しませんほぼ同じです。あなたはなぜ存在する/存在しないのですか?単に外部クエリにexit/not exists where句のアカウント部分を追加するのではないのですか? –

+0

あなたはそれが意味することを私に見せてもらえますか? – crackedcornjimmy

答えて

1

あなたのクエリがこれを行うことによって単純化することができ:NOT用

SELECT     DISTINCT p.PartId 
FROM     dbo.Part p 
WHERE     IsInExclusiveClub = 1 
AND      Account IN (SELECT AccountId FROM dbo.Accounts WHERE ForeignPassedInKey = @ForeignPassedInKey) 

クエリをEXISTS、あなたは "アカウントNOT IN" に変更します。

このためLINQクエリは、次のようになり

:!

その後
var accounts = db.Accounts 
       .Where(account => account.ForeignPassedInKey = ForeignPassedInKey) 
       .Select(account => account.AccountId); 
var parts = db.Parts 
       .Where(part => part.IsInExclusiveClub = 1 && accounts.Contains(part.AccountId)) 
       .Select(part => partId).Distinct(); 

しないためaccounts.Contains(part.AccountID)は

関連する問題