2010-07-12 11 views
2

我有一个EF4模型,其中有与Task实体(ChildTasks)具有一对多关系的Product实体。我必须根据一些用户标准从db中获取一些项目。该项目有一个名为EstimatedProgress的定制属性(不与任何列关联),我必须存储有关Project的附加信息 - 每个子任务的计算加权平均进度。问题是,最后我不能返回IEnumerable <Project>IQueryable <Project>。下面的代码演示了我想实现的目标(我知道它不能编译)。如何在LINQ to Entities查询中设置实体类型的自定义属性,并返回IQueryable <T>?

var q = from p in ObjectContext.ProjectSet.Include("ProjectBase") 
     where p.ProjectBase.IsTemplate == false 
     from ct in p.ProjectBase.ChildTasks 
     where ct.Progress != null 
      && ct.EstimatedTime != null 
     group ct by ct.prjProjectBase.Project into g 
     select new { 
      Project = g.Key, 
      EstimatedProgress = g.Sum(oo => oo.Progress.Value * oo.EstimatedTime.Value) 
          /g.Sum(oo => oo.EstimatedTime.Value), 
     }; 

var sortedQ = q.OrderByDescending(o => o.Project.ProjectBase.Status) 
      .ThenBy(o => o.Project.ProjectBase.Name); 

// this is where I want to return IQueryable<Project> 
// where each project has set custom property EstimatedProgress 
return sortedQ.Select(o => 
{ 
    o.Project.EstimatedTime = o.EstimatedProgress; 
    return o.Project; 
}); 

的问题是:是否有可能做类似的东西与EF4 LINQ查询或者一些你有一个解决办法;)在此先感谢。

回答

0

最简单的选择是将逻辑移入自定义属性获取器。

+0

感谢您的回答SLaks。不幸的是,这不是一个选项。在定义它之后,如果我可以使用我的IQueryable,Getter就没问题了(而且它不会是导致效率低下的最佳解决方案 - 一个数据库调用结果中的每个项目)。我写关于IQueryable的原因是我使用Silverlight + WCF RIA Services,而在客户端我想在datagrid中使用分页(并且只有服务器端的IQueryable完全支持它)。任何其他想法? – wlf84k 2010-07-12 21:46:45

1

你可以声明简单的包装类

public class ProductWithEstimation 
{ 
    public Product Product { get; set; } 
    public double? EstimatedTime { get; set; } 
} 

,并返回IQueryable<ProductWithEstimation>代替。

相关问题