2014-01-06 106 views
0

的回到completedFilters.Select(GetFilterDetailDril)轉換爲IQueryable的結果集

我們在GetFilterDetailDril非常複雜的邏輯調用大量的功能。 在沒有調用函數的情況下選擇行中的所有選項是不可能的問題是我們希望稍後導出它,並且我們應該可以查詢它。 但是,如果我們調用函數,c#不能再使其可查詢。 有沒有解決方案?

這就是我回到

return filtersInDevelopment.Select(GetFilterDetailDrillDownModel) 

這是功能

private FilterDevDetailDrillDownModel GetFilterDetailDrillDownModel(ALFilters alFilters) 
    { 
     alFilters = (alFilters.IsSample == 1 && alFilters.DestFilters.FirstOrDefault() != null) 
      ? alFilters.DestFilters.FirstOrDefault() : alFilters; 
     var alFiltersDevelopment = alFilters.AlFiltersDevelopment.FirstOrDefault(); 

     if (alFiltersDevelopment != null) 
     { 
      var repository = new FilterRepository(); 
      var adt = alFiltersDevelopment.Adt ?? repository.GetAdt(alFilters); 
      var edt = alFiltersDevelopment.Edt ?? repository.GetEdt(alFilters); 

      var filterActiveMilestone = alFilters.FilterActiveMilestone; 

      var milestoneTargetDate = (filterActiveMilestone != null) 
              ? filterActiveMilestone.TargetDate 
              : repository.GetFilterActiveMilestoneTargetDate(alFilters); 

      var firstDevMilestone = alFilters.FilterMilestones.FirstOrDefault(
       x => x.MilestoneTypeId == FilterConst.START_DEVELOPMENT_MILESTONE); 

      var startDevTime = (firstDevMilestone != null) 
            ? firstDevMilestone.MilestoneDate 
            : (DateTime?) null; 

      string milestoneNmae = (filterActiveMilestone != null) 
             ? filterActiveMilestone.dic_MilestoneTypes.NameForReport 
             : string.Empty; 

      double remainingMilestoneTime = (milestoneTargetDate.HasValue) 
               ? milestoneTargetDate.Value.Subtract(DateTime.Now).Days 
               : 0; 

      double delayedTime = (edt != null && adt != null) 
            ? adt.Value.Subtract(edt.Value).Days 
            : 0 ; 
      var site = db.dic_AL_Sites.Find(alFilters.SiteId); 
      return new FilterDevDetailDrillDownModel 
       { 
        FilterId = alFilters.ID, 
        Filter = alFilters.FilterCode, 
        StartDevDate = startDevTime, 
        MilelstoneName = milestoneNmae, 
        RemainingMilestoneTime = remainingMilestoneTime, 
        MilestoneEstimatedFinishDate = milestoneTargetDate, 
        EstimatedDevelopmentTime = alFiltersDevelopment.Edt, 
        DelayedTime = delayedTime, 
        Site = (site != null) ? site.Site_Name : string.Empty 
       }; 
     } 
     return null; 
    } 

很多邏輯... 我想我可查詢返回但這不是iqueriable這個filtersInDevelopment.Select(GetFilterDetailDrillDownModel )是可枚舉的,不可能看到查詢:(

+0

這麼多的編輯沒有人回答呢? – user3162954

+2

請添加一些更多的代碼和有效信息,這些信息使我們對您的要求有所瞭解。 –

+0

最後使用.AsQueryable()。 – 2014-01-06 10:39:46

回答

2

實現IEnumerable<T>接口的類型可以是轉換爲IQueryable<T>通過調用AsQueryable<T>擴展方法:

http://msdn.microsoft.com/en-us/library/bb507003(v=vs.110).aspx

有一種非一般等價物,太:

http://msdn.microsoft.com/en-us/library/bb353734(v=vs.110).aspx

+0

但我可以以後導出?當我用鼠標單擊或添加快速warch我不能看到轉換後的查詢。喜歡在iqueriable的意思是選擇bla bla bla .. – user3162954

+0

什麼查詢?表達式樹?我想有一些信息你不會在這裏告訴我們。你的LINQ語句是在純粹的CLR對象上執行的,還是在訪問實體框架上下文或NHibernate或....?如果你不讓我們猜測,對我們來說幫助更容易。 –

+0

編輯所有的事情的問題 – user3162954