1

null許容のナビゲーションプロパティを含むプロジェクションを実行するWCFデータサービスに対してクエリを作成しようとしています(つまり、基になるデータモデルのFK列がnull可能であるため、関連付けは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であり、初期化できません。このプロパティにアクセスする前に、null値を確認する必要があります。

このブログによると、C#では三項?:演算子を使用して条件付きnullチェックが可能です。ただし、残念ながら、プロジェクトはC#ではなくVB.NETにあります。VBで同等のものがIf()演算子であることは知っていますが、期待どおりに機能していないようです。上記のクエリをこれに変更すると、次のようになります。

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

実行時にこのエラーが発生します:

式(t.WrittenBy Employee!= null)を使用したタイプ(...)のインスタンスの構築または初期化はサポートされていません

テストを逆にしようとしましたが、代わりに(t.WrittenByEmployee == null)を使用しただけで、同様のエラーが発生しました。

このクエリを作成して、Data Servicesが受け入れる方法でWrittenByEmployeeナビゲーションプロパティにnullがないかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

1

ナビゲーションプロパティがnullの場合、リンクされたブログが定数ではなくnullを返すことを指摘してくれた同僚に感謝します。

上記のコードを変更して、ナビゲーションプロパティがnullのときにnull / Nothingを返すようにすると、C#およびVB.NETで機能します。

Select
    CSM = If(t.WrittenByEmployee IsNot Nothing, t.WrittenByEmployee.Name, Nothing)
                                                                          ^^^^^^^
于 2013-01-26T07:55:16.110 に答える