簡體   English   中英

如何將此T-SQL語句轉換為linq

[英]how to convert this T-SQL statment to linq

我是linq的入門者,我已經編寫了此T-SQL查詢

select * from DOCUMENT_TYPES where document_id in(
select document_id from Clearance_Document where Clearance_id=(select clearance_id from clearance_id from request where request_id=3)) 

我想將此T-SQL查詢轉換為linq,請幫助我,謝謝

好吧,我首先將您的SQL重構為一系列嵌套子查詢之外的其他內容。 我認為這應該做同樣的事情,並且更具可讀性:

SELECT
    *
FROM
    DOCUMENT_TYPES dt
JOIN
    Clearance_Document cd
    ON
    dt.document_id = cd.document_id
JOIN
    Request r
    ON
    cd.clearance_id = r.clearance_id
WHERE 
    r.request_id = 3

(我假設from clearance_id from request中的from clearance_id from request是一個錯字。)

然后,您可以輕松地重構為LINQ語句:

var result = from dt in DOCUMENT_TYPES
             join cd in Clearance_Document on dt.document_id equals cd.document_id
             join r in Request on cd.clearance_id equals r.clearance_id
             where r.request_id = 3
             select new {
                property1 = dt.something,
                property2 = cd.somethingElse,
                ...
             };
var result = 

from  a in DOCUMENT_TYPES 
let list = 
(
from b in Clearance_Document 
where b.Clearance_id ==  (from c in clearance_id where  request_id == 3).First<string>())
select b
).ToList()

where list.Contains(a.document_id) 

select a;

這樣的事情應該做(我猜您正在使用EF,但是您可以輕松地適應其他LinQ類型):

context.Document_Types.Where(doc => 
  conext.Clearance_Document.Where(cd => 
    cd.Clearance_Id == context.Request.Single(r => r.Request_Id == 3)
  ).Contains(doc.Document_Id)
).ToList();

怎么樣

var result = c.Id context.Request.Single(r => r.Id == 3)
                .Clearances.SelectMany(c => x.DocumentTypes);

實際上,獲得一個Id等於3唯一Request ,然后獲得其所有Clearances的所有DocumentTypes

如果您的數據庫設置有適當的外鍵,則這些關系將作為模型的一部分自動生成。

暫無
暫無

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

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