2011-06-01 65 views
2

LINQ還是一個新東西。似乎應該有一個更優雅的方式來使用ToDictionary來做到這一點,但無法弄清楚。這裏是我想要清理的代碼:把linq對象查詢結果放入一個打字的字典

var EventOccurrencesMappedToPatientMeds = from pm in allPtMeds 
     from e in thisUsersEventOccurrencesPlusEventData 
     where e.EventContainer.Event.PatientMedId == pm.MedicationId 
     select new ScheduleEventOccurrenceMedPair{ 
      PatientMedication = pm, 
      ScheduledEventOccurrence = e.EventOccurrence 
     }; 

int evtOccCount = 1; 
foreach (var evtOcc in EventOccurrencesMappedToPatientMeds) 
{ 
     // EventOccurrenceChoices is a Dictionary of type <int, IScheduledEventOccurrenceMedPair> 
     message.EventOccurrenceChoices.Add(evtOccCount,(ScheduleEventOccurrenceMedPair)evtOcc); 
} 

回答

2

您可以使用重載Enumerable.Select method包括索引,然後使用ToDictionary

var dict = EventOccurrencesMappedToPatientMeds 
       .Select((e, i) => new { Event = e, Index = i + 1 }) 
       .ToDictionary(o => o.Index, 
          o => (ScheduleEventOccurrenceMedPair)o.Event); 
1

使用ToDictionary擴展方法。

事情是這樣的:

var i = 1; 
var resultDictionary = (
    from pm in allPtMeds 
    from e in thisUsersEventOccurrencesPlusEventData 
    where e.EventContainer.Event.PatientMedId == pm.MedicationId 
    select new ScheduleEventOccurrenceMedPair 
    { 
     PatientMedication = pm, 
     ScheduledEventOccurrence = e.EventOccurrence 
    }) 
    .ToDictionary(arg => i++, arg => arg); 
+0

@Marvin - 這樣一條線的解決方案是不好嗎? :) – 2011-06-02 00:05:01