Sql到Linq查询问题

时间:2016-08-12 21:07:58

标签: c# linq linq-to-sql

您好我正在尝试将这个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

1 个答案:

答案 0 :(得分:2)

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

来源: Microsoft