我正在尝试针对 WCF 数据服务编写一个查询,该服务执行包含可空导航属性的投影(即基础数据模型中的 FK 列是可空的,因此关联为 0..1)。项目语言是 VB.NET,不是我选择的。查询的示例部分:
From t In DataServiceReference.Context.Transactions
Where t.ID = transactionID
Select
CSM = t.WrittenByEmployee.Name, _
t.CustomerFirstName
当针对 WrittenByEmployee 为空的行执行此查询时,如预期的那样,我收到以下错误:
导航属性“WrittenByEmployee”返回的条目为空且无法初始化。您应该在访问此属性之前检查空值。
根据此博客,可以在 C# 中使用三元 ?: 运算符进行条件空检查。然而,遗憾的是该项目是在 VB.NET 中,而不是 C#。我知道 VB 中的等价物是 If() 运算符,但它似乎没有按预期工作。如果我将上述查询更改为:
Select
CSM = If(t.WrittenByEmployee IsNot Nothing, t.WrittenByEmployee.Name, String.Empty)
我在运行时收到此错误:
不支持使用表达式 (t.WrittenBy Employee != null) 构造或初始化类型 (...) 的实例
我尝试反转测试但得到了类似的错误,只有 (t.WrittenByEmployee == null) 代替。
如何编写此查询以以 Data Services 将接受的方式检查 WrittenByEmployee 导航属性中的空值?