[英]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.