簡體   English   中英

轉換 SQL - 使用 SQL IN 的 Linq

[英]Convert SQL - Linq with SQL IN

我在下面有這個 sql 查詢工作正常。 我想把它轉換成LINQ

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 的所有名稱。

基於以下 sql 查詢中的 where 條件

 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)))

linq 中OR運算符的等效項是| || 而不是&& 您的 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 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM