2010-07-12 10 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>代替。

相關問題