2017-10-26 9 views
1

私はこの下のSQLクエリをうまく動作させています。私はそれがLINQSQLを変換するSQL - Linq with

SELECT DISTINCT TOP (100) PERCENT PersonId, FamilyName, GivenName, MiddleName, CompleteName 
FROM   dbo.MainTable AS a 
WHERE  (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table1 
         WHERE  (PersonId = a.PersonId))) OR 
        (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table2 
         WHERE  (PersonId = a.PersonId))) OR 
        (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table3 
         WHERE  (PersonId = a.PersonId))) 
ORDER BY FamilyName 

コードが

var Sigids = (from a in db.Table1 select a.PersonId); 
var RecIds = (from a in db.Table2 select a.PersonId); 
var AppIds = (from a in db.Table3 select a.PersonId); 
var signatories = (from p in db.MainTable 
        where (Sigids.Contains(p.PersonId) 
        && RecIds.Contains(p.PersonId) 
        && AppIds.Contains(p.PersonId)) 
        select new { CompleteName = p.CompleteName, p.PersonId }); 

をしようとしました変換するしかし、これはPERSONIDは、これらの3つのテーブルである場合にのみ結果。私がここで達成したいのは、表1 - 3のすべての名前をメインテーブルから表示したいということです。条件が

WHERE  (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table1 
         WHERE  (PersonId = a.PersonId))) OR 
        (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table2 
         WHERE  (PersonId = a.PersonId))) OR 
        (PersonId IN 
         (SELECT  PersonId 
         FROM   dbo.Table3 
         WHERE  (PersonId = a.PersonId))) 

以下のSQLクエリにLINQでORオペレータの相当|または||の代わり&&いずれかである場所に基づいて

+2

'どこs1.IsActive == true'の中S1は何ですか? – CodingYoshi

+0

SQLクエリのwhere条件が 'OR'を使用しているため、linqコードのwhere条件の' && 'は' || 'に変更する必要があります。 – ekad

+0

@コーディングYoshi aw申し訳ありません。私は参加を削除し、私はそれを削除することを忘れました。 – KiRa

答えて

1

。あなたのLINQコードは|を使用して以下のように変更します。

var Sigids = (from a in db.Table1 select a.PersonId); 
var RecIds = (from a in db.Table2 select a.PersonId); 
var AppIds = (from a in db.Table3 select a.PersonId); 
var signatories = (from p in db.MainTable 
        where (Sigids.Contains(p.PersonId) 
        | RecIds.Contains(p.PersonId) 
        | AppIds.Contains(p.PersonId)) 
        select new { CompleteName = p.CompleteName, p.PersonId }); 

または||を使用して以下のように:

var Sigids = (from a in db.Table1 select a.PersonId); 
var RecIds = (from a in db.Table2 select a.PersonId); 
var AppIds = (from a in db.Table3 select a.PersonId); 
var signatories = (from p in db.MainTable 
        where (Sigids.Contains(p.PersonId) 
        || RecIds.Contains(p.PersonId) 
        || AppIds.Contains(p.PersonId)) 
        select new { CompleteName = p.CompleteName, p.PersonId });