LinQ:使用值null连接可空属性

时间:2014-10-16 11:27:45

标签: vb.net linq join

我有一个对象列表,其属性customerId是一个可以为空的System.Guid属性。 我还有一个System.Guid类型的id列表,我还在这个列表中添加了一个Guid.Empty值。

我尝试在两者上进行连接,但不返回带有空guid的对象。

Dim dos = (From d In documents Join c In allowedCustomers On c Equals If(d.CustomerGuid = Nothing, System.Guid.Empty, d.CustomerGuid) Select d).Skip(10 * (pageNr - 1)).Take(10).ToList

有什么问题?还有另一种方法可以更好地完成这项工作吗?

1 个答案:

答案 0 :(得分:2)

您使用的是d.CustomerGuid = Nothing,但必须使用d.CustomerGuid Is Nothing

尝试使用VB.NET's null-coalescing operator

的方法
Dim query = From doc In documents
            Join custID In allowedCustomers
            On If(doc.CustomerGuid, Guid.Empty) Equals custID
            Skip 10 * (pageNr - 1)
            Take 10
            Select doc
Dim docList = query.ToList()

请注意,您可以使用多行增加可读性,同时,VB.NET的查询语法比C#强大,因此您可以在查询中使用SkipTake