我试图找出一种方式来获取额外的数据与从RIA域服务返回的实体传递。传递计算值与RIA服务
例如,假设我想为“订单”显示DataGrid,并在订单中包含总项目的列。
Order Num. | Cust. Name | *No. of Items Ordered*
4545 | John | 4
1234 | Mike | 7
在服务器端,有一个LINQ查询,我可以这样做:
var query =
from o in entities.Orders
select new OrderWithItemCount { Order = o, ItemCount = o.Items.Count() };
...这会找回我的订单随着项目的所有一气呵成计数。
问题是,我无法找到将这些结果通过域服务传播到Silverlight客户端。我想我可以使用标准的WCF服务,但那有什么好玩的?
更新
什么竟然是实际的问题...
我在一个点实际上已经已经尝试了“简单的方法”,日产风扇和弗洛里安林点出。当我尝试时,我没有得到所有的数据。 (我还需要在查询中包含客户Person
以获取他们的名字。)事实证明,我认为RIA Services的限制实际上是EF 4.0的限制,因为如果选择entities.Orders.Include("Customer")
,则说明entities.Orders.Include("Customer")
不起作用一种不是Order
的新类型。解决方法是在你的select语句中明确选择o.Customer
,EF将自动将选定的人员连接到Order
的assiocated属性。
我不知道你可以定义一个新实体并以这种方式使用它,谢谢! – grimus 2011-03-18 15:00:24
我要为代码提交编辑,很乐意标记为答案。 – grimus 2011-03-18 15:01:17
创建一个全新的实体来实现这一点当然是可选的,但只需将属性添加到由域服务代理创建的部分类中,或者将它作为部分类添加到您的LINQ中,即可更快地到达预期的目的地SQL/EF。见下文。 – 2011-03-18 17:29:51