【发布时间】:2013-01-26 15:55:16
【问题描述】:
我正在尝试针对 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”返回的条目为空且无法初始化。在访问此属性之前,您应该检查空值。
根据this blog,在 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) 代替。
如何编写此查询,以数据服务可以接受的方式检查 WrittenByEmployee 导航属性中的空值?
【问题讨论】: