说我有一个OData的查询,看起来像这样的投影(选择)(我的实际查询要复杂得多):展开了WCF数据服务(OData的)
Orders.Select(z => new { z.SubOrder.Addresses,
z.SubOrder.Cost,
z.SubOrder.SubOrderId,
z.Sequence});
这工作得很好。除Address对象上有一个子对象(StateRef)。由于StateRef在状态表上进行查找,它将返回为空值。
为了说明,这里的地址对象地址可能外观的示例:
Address:
string Street 1
string Street 2
StateRef PrimaryState
string City
// ... 42 other string attributes not shown ...
的StateRef
对象上有国家的名字,但也有一些其他重要的国家性质(也许状态鸟?)
所以,我想知道的是,我现在必须为z.SubOrder.Addresses创建一个包含所有46个属性的“子投影”,以便我可以访问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 ----------+
尝试这给这个错误:
Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.
更新: 下面是一个例子查询来说明什么,我问:
Users.Take(10).Select(x=>new { x.Id, x.Reputation, x.Comments})
针对“data.stackexchange.com/stackoverflow/atom”运行。你会看到Comments有一个返回null的Post对象。
我需要那个返回里面的值。
注意:我知道我可以手动输入到“子”投影中。阅读上面为什么我不想要那样。
因为只有展开,似乎在第一个孩子的工作就可以反转查询?因此,对于您的SO示例,请从评论开始,例如(c => c.User).Expand(c => c.Post).Take(10) – Phil 2013-02-11 17:53:39
@Phil,Alas,no。这个例子很简单,但我的实际查询非常复杂,有几个“子部分”。 – Vaccano 2013-02-11 19:16:00
链接已死。 – 2017-08-29 15:28:52