2013-11-14 125 views
0

感覺就像在這裏一樣。我有一個父對象,它擁有一週中每天的子對象集合。所以,我可以這樣做parent.MondayChildrenparent.TuesdayChildren如何將變量傳遞給.SelectMany

我的父對象的集合,在我的LINQ查詢我想用parents.SelectMany(c => c.MondayChildren)但基於一週的當前天。

如何爲SelectMany方法提供變量?

更新的信息:

我現在,我已經錯過了重要的信息出來看。此查詢將轉換爲SQL。爲了解釋,單位由多個SlotPool組成,並且PatientSchedules在一週中的每一天都分配給一個槽位。

我的代碼是下面這導致內部的.NET Framework數據提供程序錯誤1025

Func<SlotPool, IEnumerable<PatientSchedule>> queryDay = null; 

      switch (DateTime.Today.DayOfWeek) 
      { 
       case DayOfWeek.Monday: 
        queryDay = d => d.MondayPatientSchedules; 
        break; 
       case DayOfWeek.Tuesday: 
        queryDay = d => d.TuesdayPatientSchedules; 
        break; 
       // .. Not shown for brevity 
       default: 
        throw new NotSupportedException("Unsupported DayOfWeek"); 
      }  

IEnumerable<UnitWithCountVM> data = _unitOfWork.Units.GetAll() 
       .Select(u => new UnitWithCountVM() 
       { 
        ID = u.ID, 
        Name = u.Name, 
        PatientNumber = u.SlotPools.SelectMany(queryDay).Count() 
       }).ToList();  
+1

不需要特殊的語法。請顯示您遇到問題的實際代碼,並描述您希望工作的不同方式。 – BartoszKP

+0

您可以添加您期望的代碼示例嗎?您不能將一個變量傳遞給'SelectMany',但是您可以在傳遞給'SelectMany'的'Func'的閉包中包含局部變量... –

+0

如果您使用的是EntityFramework,則需要使用Expression >>'也有一些'IEnumerable's可能是'IQueryable's –

回答

0

也許有switch

List<Children> todaysChildren = parents 
    .SelectMany(p => 
    { 
     switch(DateTime.Today.DayOfWeek) 
     { 
      case DayOfWeek.Monday: 
       return p.MondayChildren; 
      case DayOfWeek.Tuesday: 
       return p.TuesdayChildren; 
      // ... 
      default: 
       throw new NotSupportedException("Unsupported DayOfWeek"); 
     } 
    }) 
    .ToList(); 
+0

感謝您的輸入,但我無法使用此解決方案,因爲查詢需要轉換爲SQL。我錯過了這個,現在更新了我的問題。 – Copers

0

這是我的最終解決方案。關鍵是要提供一個表達式,但也要添加.AsQueryable()到我的SlotPools集合。如果有人看到我可能錯過的問題,請告訴我。我對EntityFramework和Linq非常陌生: