有关domainservices的问题
直接用向导生成的DomainServices里所生成的方法,是直接针对某个实体的,也就是单纯的实体,现在我想在DomainServices中将单一实体的写法改一下,与其他实体关联,例如一个订单主表,上面有个货物编号,我在这个订单主表中将货物表关联进来,这样在显示订单明细时可以同时显示货物描述,但这样写,返回的值就不是单一的订单实体了,编译会提示出错
public IQueryable<OrderDetail> GetOrderDetail(string orderNo)
{
var order=from o in this.ObjectContext.OrderDetails
join b in this.ObjectContext.Products on a.ProductID equals b.ProductID
select new { a.OrderNo,
a.ProductID,
b.productName,
a.quantity
};
return order;
}
在这里return order 会报错,
Error1Cannot implicitly convert type 'System.Linq.IQueryable<AnonymousType#1>' to 'System.Linq.IQueryable<Tian.Web.Order>'. An explicit conversion exists (are you missing a cast?)F:\Tian\Tian\Tian.Web\TTServices.cs5020Tian.Web
这个查询方法要怎么写呢,写好后怎么在DataGrid里显示数据,谢谢!
[解决办法]
楼主是想做主从表的关联查询吗?
楼主这样做是行不通的!假设楼主的主从表式 Order,orderDetails
(1)在DomainService1.metadata.cs添加如下代码
找到class Order类,在其
public EntityCollection<orderDetails> orderDetails{ get; set; }
在其上加上[Include]特性标识符
(2)要在DomainService1.cs添加如下代码
public IQueryable<Order> GetOneOrderDetails()
{
return this.ObjectContext.Order.Include("OrderDetails");
}
(2)在客户端用调用此服务,找到Order实体,通过Order的导航属性OrderDetails从而找到OrderDetails实体
[解决办法]
LZ的错误在于将 匿名类 隐式 转换为 OrderDetail,这是不可能转换成功的。
Joetao 的方法可行,但是有保留意见。
就是上次讨论过的 Include() 和 Load() 的性能问题。
其实在 EF 中,在对 this.ObjectContext.OrderDetails 进行查询时,
已经查询出来的 Product 会自动关联上 OrderDetails ,
利用这一特性,可以避开多个不同的子表同时 Include() 所生成的巨复杂的SQL,
显著提高性能。
[解决办法]
更正一下,可能是:
public IQueryable<object> GetOrderDetail(string orderNo) { var order=from o in this.ObjectContext.OrderDetails join b in this.ObjectContext.Products on a.ProductID equals b.ProductID select new { a.OrderNo, a.ProductID, b.productName, a.quantity }; return order; }