4

处理 EF 4 C#.Face 中的问题 join 。sql语法

Select a.Code, b.Name from DepartmentMaster a
Join DepartmentDetail  b on isnull( a.ID,0) =isnull( b.ID,0)

注意: a.ID ,b.ID 都可以为空

想要在 Linq 语法中输出上述语法。波纹管语法对我不起作用

Var r=from a in DepartmentMaster
Join b in DepartmentDetail  on a.ID equals b.ID
Select a.Code,b.Name

需要帮助在 linq ef 中编写 sql 语法 isnull() 类似的过程。

如果有任何疑问,请询问。

4

4 回答 4

3

如果 id 为 null,您可以使用 null-coalescing 运算符提供默认值:

from c in DepartmentMaster
join b in DepartmentDetail
    on (a.ID ?? 0) equals (b.ID ?? 0)
select new {
    a.Code, b.Name
}

这将生成查询

SELECT [t0].[Code], [t1].[Name] AS [ID1]
FROM [DepartmentMaster] AS [t0]
INNER JOIN [DepartmentDetail] AS [t1] 
    ON (COALESCE([t0].[ID],@p0)) = (COALESCE([t1].[ID],@p1))

这不完全一样,ISNULL但结果应该是一样的。

于 2013-08-26T15:10:32.123 回答
2

这可能会帮助你

Var r=from a in DepartmentMaster
Join b in DepartmentDetail  on a.(x => (int?)a.ID) ?? 0 equals b.(y => (int?)b.ID) ?? 0
Select a.Code,b.Name
于 2013-08-26T15:08:11.680 回答
1

您可以使用DefaultIfEmpty,它用一个默认值的集合替换一个空集合。因为 int 的默认值为 0

var r=from a in DepartmentMaster
join b in DepartmentDetail  on a.ID.DefaultIfEmpty() equals b.ID.DefaultIfEmpty()
Select a.Code,b.Name
于 2013-08-26T15:14:21.443 回答
0

你应该能够做这样的事情:

Join b in DepartmentDetail  on (a.ID == null ? 0 : a.ID) equals (b.ID == null ? 0 : b.ID)
于 2013-08-26T15:09:31.573 回答