为了知识起见,我想将 SQL 查询转换为 LINQ 查询表达式。这是原始的SQL:
SELECT CT.COURSE_NODE_ID AS CNID, CT.NODE_TEXT
FROM COURSE_RELATED_VERSIONS AS CRV INNER JOIN
COURSE_TREE AS CT ON CRV.COURSE_NODE_ID = CT.COURSE_NODE_ID
WHERE (CRV.COURSE_ID = '38890') AND (CRV.COURSE_PARENT_NODE_ID = '-1')
基本上,只需根据特定条件(键匹配、课程 ID 匹配条件、父节点不等于 -1)从表中获取两个字段。这是我使用 LINQPad 提出的 LINQ 查询表达式:
from ct in COURSE_TREEs
join crv in COURSE_RELATED_VERSIONS
on ct.COURSE_NODE_ID equals crv.COURSE_NODE_ID
where crv.COURSE_ID == 38890 && crv.COURSE_PARENT_NODE_ID == -1
select new {ct.COURSE_NODE_ID, ct.NODE_TEXT}
还不错,我以 SQL 为中心的大脑仍然可以理解。但是,出于笑容,我想知道这个查询表达式作为 lambda 表达式会是什么样子。对于我的一生,我无法弄清楚语法。因此,我使用 LINQPad 中的 lambda 工具来查看我的 LINQ 查询表达式的样子。这里是:
COURSE_TREEs
.Join (
COURSE_RELATED_VERSIONS,
ct => ct.COURSE_NODE_ID,
crv => crv.COURSE_NODE_ID,
(ct, crv) =>
new
{
ct = ct,
crv = crv
}
)
.Where (temp0 => ((temp0.crv.COURSE_ID == 38890) && (temp0.crv.COURSE_PARENT_NODE_ID == -1)))
.Select (
temp0 =>
new
{
COURSE_NODE_ID = temp0.ct.COURSE_NODE_ID,
NODE_TEXT = temp0.ct.NODE_TEXT
}
)
哇!不是我认为 lambda 表达式查询的样子。所以,我正在研究 LINQPad 的输出,了解我的查询表达式如何看起来像一个 lambda 表达式,我想知道它是否可以写得更好?我仍在学习 LINQ(和 lambda 表达式)的技巧,但我不禁觉得这里生成的 lambda 表达式太复杂了!我错了吗?是否可以编写一个 lambda 表达式,它产生与原始 SQL 和查询表达式相同的输出,但又不是不必要的复杂?也许“复杂”是主观的,因为它可能只会在我的 SQL 大脑中显得复杂。我只是觉得 LINQPad 中生成的 lambda 表达式可以写得更好......我只是不知道如何。