2010-04-29 17 views
1

我需要將以下TSQL查詢轉換爲Lambda,並卡在Count和Sum上。我知道我可以在表達式的末尾添加.Count()和.Sum - 但是如何將該值作爲表達式的一部分?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... 

我表達迄今:

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

就像在SQL中,你需要一組由聲明 – 2010-04-29 17:22:24

回答

1

我想通了,但不知道這是否是處理的最佳方式;

如果有人發現更好的方法 - 意思是在一個單一的表達做它,請回應!

我發送我的計算函數的方法;

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); 
     } 

私人的Int32成功(INT ID){ ...

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


     return success; 
    }