首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

有关domainservices的有关问题

2012-09-21 
有关domainservices的问题直接用向导生成的DomainServices里所生成的方法,是直接针对某个实体的,也就是单

有关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,
显著提高性能。
[解决办法]
更正一下,可能是:

C# code
 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;  } 

热点排行