2010-07-08 26 views

Répondre

1

Bien sûr, pourquoi pas? Qu'est-ce qui vous empêche de modifier le nouveau DetectorDetails, avec le code de ForEach, dans l'instruction Select?

+0

Je ne parviens pas à obtenir la syntaxe correcte. Visual Studio continue à aboyer sur moi. – Hcabnettek

0

Est-ce que cela vous aide à vous rendre là où vous allez? Je ne peux pas être sûr que tous les types de données correspondent et compileront tel quel, mais c'est un coup de poignard pour mettre toute cette logique dans votre .Select(). Sûrement, il peut être amélioré pour être meilleur! N'hésitez pas à modifier cette réponse pour qu'elle fonctionne mieux.

response.Data.Detectors = atisDAO.GetPME(xl, null).Select(pme => 
       new DetectorDetails{ 
            ID = pme.PlaceNum.ToString(), 
            Count = atisDAO.GetSummaryEntries(int.Parse(pme.PlaceNum.ToString())).Count(), //some work needed here to ensure pme.PlaceNum is actually an number 
            DetectionTime = new DateTimeZone{ 
             ReadDate = summaries.Max(summary => summary.ReadDate).ToString(DATE_FORMAT), 
             ReadTime = summaries.Max(summary => summary.ReadDate).ToString(TIME_FORMAT) 
            } 
            } 
); 
0

Je l'ai compris. J'avais besoin d'une déclaration de retour dans ma projection.

var entries = atisDAO.GetPME(xl, null); 
response.Data.Detectors = new List<DetectorDetails>(entries.Select(pme =>{ 
    var details = new DetectorDetails { ID = pme.PlaceNum.ToString()}; 
    var summaries = atisDAO.GetSummaryEntries(pme.PlaceNum); 
    if (summaries.Any()) 
    { 
     var count = summaries.Sum(summary => summary.TODCount + summary.BFICount + summary.ViolationCount); 
     var detectionDate = summaries.Max(summary => summary.ReadDate); 

     details.Count = count.ToString(); 
     details.DetectionTime = new DateTimeZone { 
      ReadDate = detectionDate.ToString(DATE_FORMAT) 
      , ReadTime = detectionDate.ToString(TIME_FORMAT) 
     }; 
    } 

    return details; 
}));