2010-04-29 6 views
1

Je dois convertir la requête TSQL suivante en Lambda et je suis bloqué sur Count et Sum. Je sais que je peux ajouter .Count() et .Sum à la fin de l'expression - mais comment puis-je obtenir la valeur dans le cadre de l'expression?Comment compte-t-on/somme dans une expression Lambda?

T-SQL:

select b.pk, b.CreateTime, b.StartTime, b.endTime, count(a.rowid) as total, 
    sum(case when ItemStatus = 'success' then 1 else 0 end) as Sucess from... group by... 

Mon expression jusqu'ici:

var results = from context1 in dmbl1 join context2 in dmbl2 on context1.BatchLog_ID equals context2.pk 
         select new 
         { 
          CycleID = context2.pk, 
          CreateDateTime = context2.CreateDateTime, 
          StartTime = context2.startTime, 
          endTime = context2.endTime, 
          total = context1.RowID. <<<<< This is where I need Countof 
          Success = <<< This is where I need Sumof 
         }; 
+0

Tout comme dans SQL, vous avez besoin d'un groupe par déclaration –

Répondre

1

j'ai tout compris, mais pas sûr si elle est la meilleure façon de gérer;

Si quelqu'un trouve un meilleur moyen de le faire en une seule expression, répondez !!! J'ai envoyé mes fonctions de calcul aux méthodes;

var results = from Context1 in dmbl1.Table 
         join Context2 in dmbl2.batchLogs on Context1.BatchLog_ID equals Context2.pk 
         select new 
         { 
          CycleID = Context2.pk, 
          CreateDateTime = Context2.CreateDateTime, 
          StartTime = Context2.startTime, 
          endTime = Context2.endTime 
         }; 


     foreach (var result in results) 
     { 
      BatchJob bj = new BatchJob(); 
      bj.CreationDate = result.CreateDateTime; 
      bj.CycleID = result.CycleID; 
      bj.EndTime = result.endTime; 
      bj.StartTime = result.StartTime; 
     // From Here I called Methods that returned my counts 
      bj.TotalProcessed = Total(result.CycleID); 
      bj.ProcessedSuccess = Success(result.CycleID); 
      bj.ProcessedFailed = Failure(result.CycleID); 
      batchjobs.Add(bj); 
     } 
privé Int32 succès

(ID int) { ...

 var success = (from blah in context1.table 
         where context1.ID == ID 
         && context1.ItemStatus == "success" 
         select S context1.ItemStatus 
        ).Count(); 


     return success; 
    } 
Questions connexes