【发布时间】:2019-07-07 01:46:41
【问题描述】:
假设我有一个看起来像这样的 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 对象上面有州的名称,但也有一些其他重要的州属性(也许是州鸟?)
所以,我想知道的是,我现在是否必须为包含所有 46 个属性的 z.SubOrder.Addresses 创建一个“子投影”,以便我可以访问 PrimaryState 项目? (我希望不会)
除了编码更多,这也意味着我必须使用匿名类型。这使得我的映射必须手动进行(而不是使用 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 对象。
我需要它来返回其中的值。
注意:我知道我可以手动将它们全部输入到“子”投影中。阅读上面的内容,了解我不希望这样做的原因。
【问题讨论】:
-
由于 Expand 似乎只适用于第一个孩子,您可以反转您的查询吗?因此,对于您的 SO 示例,请从评论开始,例如Comments.Expand(c => c.User).Expand(c => c.Post).Take(10)
-
@Phil,唉,不。这个例子很简单,但我的实际查询很复杂,有几个“子部分”。
-
链接已失效。
标签: c# .net exception odata wcf-data-services