我是 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,请帮助我,谢谢
我是 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
是一个错字。)
然后您可以轻松地重构为 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);
实际上,得到一个且只有Request
一个Id
等于3
,然后得到所有它DocumentTypes
的所有Clearances
。
如果您的数据库设置了适当的外键,这些关系将作为模型的一部分自动生成。