Sql Linq 查询问题

Sql to Linq Query Issue

您好,我正在尝试将此 sql 查询发送到 linq,但由于加入,我遇到了问题。

sql:

SELECT 
//fields here
FROM CustomFields cf LEFT JOIN CustomValues cv on cv.CustomFieldID = cf.CustomFieldID AND cv.RefID=362373
WHERE cf.OrganizationID = 1078
AND cf.RefType=9
ORDER BY cf.Position

我的 linq 是:

from cf in CustomFields
join cv in CustomValues on cf.CustomFieldID equals cv.CustomFieldID
where cf.OrganizationID == 1078 && cf.RefType == 9 && cv.RefID == 362373
select cf
var query = from cf in CustomFields
join cv in CustomValues on cf.CustomFieldID equals cv.CustomFieldID into r
from cv in r.Where(cv => cv.RefID == 362373).DefaultIfEmpty()
where cf.OrganizationID == 1078 && cf.RefType == 9
select cf

下面是一些解释:

join 子句使用特殊的 equals 关键字比较指定键的相等性。带有 into 表达式的 join 子句称为组连接。into 关键字用于创建标识符。 如果没有发现右侧源序列中的元素与左侧源中的元素匹配,则连接子句将为该项目生成一个空数组。因此,除了结果序列被组织成组之外,组连接基本上仍然是内部等值连接。要在 LINQ 中执行左外部联接,请将 DefaultIfEmpty 方法与组联接结合使用,以指定在左侧元素没有匹配项时生成的默认右侧元素。 where 子句是一种过滤机制。它几乎可以位于查询表达式中的任何位置,但它不能是第一个或最后一个子句。 where 子句可能出现在组子句之前或之后,具体取决于您是否必须在分组之前或之后过滤源元素。

来源:微软