次のようなODataクエリがあるとします(実際のクエリははるかに複雑です)。
Orders.Select(z => new { z.SubOrder.Addresses,
z.SubOrder.Cost,
z.SubOrder.SubOrderId,
z.Sequence});
これは正常に機能します。Addressオブジェクトにサブオブジェクト(StateRef)があることを除いて。StateRefはStateテーブルを検索するため、nullとして返されます。
説明のために、アドレスオブジェクトAddressがどのように見えるかの例を次に示します。
Address:
string Street 1
string Street 2
StateRef PrimaryState
string City
// ... 42 other string attributes not shown ...
オブジェクトには州のStateRef
名前がありますが、他のいくつかの重要な州のプロパティもあります(おそらく州の鳥ですか?)
だから、私が疑問に思っているのは、PrimaryState
アイテムにアクセスできるようにするために、46個の属性すべてを含むz.SubOrder.Addressesの「サブプロジェクション」を作成する必要があるのでしょうか。(私は望んでいません)
コーディングがはるかに多いだけでなく、匿名型を使用する必要があることも意味します。そのため、(AutoMapperを使用する代わりに)手動でマッピングする必要があります。
では、私が探しているのは、プロジェクション内でStateRefを「拡張」する方法ですか?
このようなもの:
Orders.Select(z => new { z.SubOrder.Addresses.Expand("PrimaryState"),
z.SubOrder.Cost, ^
z.SubOrder.SubOrderId, |
z.Sequence}); |
|
// This is not allowed by the compiler ----------+
これを試してみると、次のエラーが発生します。
匿名タイプのメンバー宣言子が無効です。匿名型のメンバーは、メンバーの割り当て、単純な名前、またはメンバーアクセスを使用して宣言する必要があります。
更新: これは私が質問していることを説明するためのクエリの例です:
Users.Take(10).Select(x=>new { x.Id, x.Reputation, x.Comments})
「 data.stackexchange.com/stackoverflow/atom 」に対してそれを実行します。Commentsにはnullを返すPostオブジェクトがあることがわかります。
その中の値を返すためにそれが必要です。
注:すべてを手動で「サブ」プロジェクションに入力できることはわかっています。私がそれを望まない理由については、上記をお読みください。