簡體   English   中英

使用與LINQ的SQL IN函數等效的集合

[英]Using the equivalent to the SQL IN function with LINQ with a collection

如何在LINQ中翻譯以下內容?

SELECT DISTINCT w.Worker_ID, w.Surname, w.FirstName, ps.JobNumber
FROM Worker w, ProjectSignatory ps
where w.Worker_ID = ps.Worker_ID
and ps.JobNumber 
IN 
    (SELECT DISTINCT pa.JobNumber
    FROM Worker w, PAAFRegister pa
    where w.Worker_ID = pa.Worker_ID
    and w.Worker_ID = @UserX)

我已經看到一些帖子暗示.Contains函數是一個好主意,但是因為我正在查看結果集合,然后根據我在其他響應中看到的內容LINQ在人們調用時不喜歡它.Contains on a采集。

我試圖從整體上理解LINQ的工作原理。 我相對缺乏經驗。 任何建議將不勝感激。

編輯:我已經看到了一些方法,我想知道以下是一個良好的開端還是最好使用連接的鏈接查詢實現?

var sig = from w in db.Workers
          join ps in db.ProjectSignatories
              on w.Worker_ID equals ps.Worker_ID
          select ps;

var paaf = from w in db.Workers
           join pa in db.PAAFRegisters
               on w.Worker_ID equals pa.Worker_ID
           where w.Worker_ID == workerID
           select w;

我知道這是不完整的,沒有任何目的或對我試圖實現的目標毫無意義。 這僅僅是基於我以前發過的帖子的一個例子,並且想知道這種方法是否合適。

謝謝!

你正在尋找.Contains()函數。

  1. 首先構建查詢的內部過濾器集部分。

    EG: .Contains() (用SQL術語表示“ ps.JobNumber IN (...) ”)

  2. 使用.Contains函數按新數據子集篩選查詢。

例:

C#類SQL語法:

var subSet = select JobNumber 
               from Workers 
              where Worker_ID == "UserX";

var result = select JobNumber 
               from Workers 
              where subSet.Contains(jobnumber);

LINQ鏈接:

var subSet = Workers.Where(o => o.Worker_ID == "UserX")
                    .Select(o => o.JobNumber)
                    .Distinct();

var result = Workers.Where(o => subSet.Contains(o.JobNumber)).ToList();

您可以在LINQ中創建子選擇。

var jobNumbers = select JobNumber from Workers where <your criteria, joins>
var myResult = select JobNumber from Workers where <your criteria, joins> and jobNumbers.Contains(JobNumber)

暫無
暫無

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

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