具有可空导航属性的WCF数据服务查询投影

时间:2013-01-25 23:54:36

标签: wcf-data-services

我正在尝试针对WCF数据服务编写查询,该服务执行包含可空导航属性的投影(即基础数据模型中的FK列可以为空,因此关联为0..1)。项目语言是VB.NET,不是我选择的。查询的示例部分:

From t In DataServiceReference.Context.Transactions
Where t.ID = transactionID
Select
    CSM = t.WrittenByEmployee.Name, _
    t.CustomerFirstName

当针对WrittenByEmployee为null的行执行此查询时,我得到以下错误,正如人们所期望的那样:

  

导航属性“WrittenByEmployee”返回的条目为null,无法初始化。您应该在访问此属性之前检查空值。

根据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)。

如何组合此查询以Data Services将接受的方式检查WrittenByEmployee导航属性是否为空?

1 个答案:

答案 0 :(得分:1)

感谢一位同事指出,当导航属性为null时,链接的博客返回null而不是常量!

如果在导航属性为null时更改上面的代码以返回null / Nothing,则它在C#和VB.NET中工作!

Select
    CSM = If(t.WrittenByEmployee IsNot Nothing, t.WrittenByEmployee.Name, Nothing)
                                                                          ^^^^^^^