C# 当需要左外部联接类型时,LINQ中联接表的问题

C# 当需要左外部联接类型时,LINQ中联接表的问题,c#,linq,C#,Linq,我有两张桌子: Network_Clients Clients 网络客户端有三列 networkClientID: Key Name: Varchar Description: Varchar 客户端有4列: clientID: Key networkClientId: FK to Network_Clients -> networkClientID Name: Varchar Description: Varchar 客户表: clientID networkClientID

我有两张桌子:

Network_Clients
Clients
网络客户端有三列

networkClientID: Key
Name: Varchar
Description: Varchar
客户端有4列:

clientID: Key
networkClientId: FK to Network_Clients -> networkClientID
Name: Varchar
Description: Varchar
客户表:

clientID    networkClientID name    description
1                2          Client1 Client of Client2
2                3          Client1 Client of Client3
3                3          Client4 Client of Client3
4                1          Client4 Direct Placement Client
5                1          Client1 Direct Placement Client
networkClientID name            description
1           Direct Placer       NULL
2           Client2             Network Client Client2
3           Client3             Network Client Client3
4           Test One            Test One Network Client
网络客户端表:

clientID    networkClientID name    description
1                2          Client1 Client of Client2
2                3          Client1 Client of Client3
3                3          Client4 Client of Client3
4                1          Client4 Direct Placement Client
5                1          Client1 Direct Placement Client
networkClientID name            description
1           Direct Placer       NULL
2           Client2             Network Client Client2
3           Client3             Network Client Client3
4           Test One            Test One Network Client
以下是我的LINQ查询:

from cn in Clients_Network
join c in Clients on cn.networkClientID equals c.networkClientID
select new { cn, c }
这将返回除直接放置器和测试一项之外的所有内容,因为这两项在客户表中都没有链接字段

我怎样才能让这两个人出现呢?

使用(即加入…):

这相当于SQL中的左连接使用(即连接到):


这相当于SQL中的左连接

Direct Placer
Clients
表中有
networkClientID
1。是的,它正在显示,但我的测试没有。很抱歉造成混淆。
Direct Placer
确实有
networkClientID
1,它存在于
Clients
表中。是的,它正在显示,但我的测试之一没有。抱歉造成混淆。这在LinqPad中起作用,但现在它在我的C#app中导致了错误,它并没有导致错误,我只需要将一些东西转换为可为null,正如它所说的那样。@JamesWilson如果你需要返回客户端的一些属性,那么你应该像这样检查cc是否为null:
new{cn,clientId=(cc==null)?null:(int?)cc.clientId}
(如果没有要连接的内容,则返回默认值时就是这种情况)这在LinqPad中起作用,但现在它在我的C#app中导致了错误,它并没有导致错误,我只需要将一些内容转换为可为null。@JamesWilson如果你需要返回客户端的某些属性,那么你应该像这样检查cc是否为null:
new{cn,clientId=(cc==null)?null:(int?)cc.clientId}
(如果没有要连接的内容,则返回默认值时就是这种情况)