2017-03-28 38 views
1

我很新的LINQ和實際戰鬥到下面的T-SQL語句轉換爲LINQ to SQL或LINQ到實體表達:轉換的T-SQL語句轉換成LINQ表達

SELECT TOP 1 
    vm.EventID, 
    vmm.VotingMatrixID, 
    PersonAcceptedCount = SUM(CAST(vmm.IsAccepted AS INT)) 

FROM VotingMatrixMember vmm 

JOIN VotingMatrix vm 
    ON vmm.VotingMatrixID = vm.ID 

WHERE vm.EventID = 'abbe3077-24de-45d8-ac04-13dba97c1567' 
    AND vm.Deleted = 0 
    AND vmm.Deleted = 0 

GROUP BY vm.EventID, vmm.VotingMatrixID 

ORDER BY PersonAcceptedCount DESC 

回答

0
var query = 
    from vm in dataContext.VotingMatrices 
    where vm.EventId == eventId 
    where vm.Deleted == 0 
    from vmm in vm.VotingMatrixMembers 
    where vmm.Deleted == 0 
    group vmm by new { vm.EventId, vmm.VotingMatrixId } into g 
    select new 
    { 
    g.Key.EventId, 
    g.Key.VotingMatrixId, 
    PersonAcceptedCount: g.Select(x => Convert.ToInt32(x.IsAccepted)).Sum() 
    } into resultRow 
    order by resultRow.PersonAcceptedCount descending 
    select resultRow; 

var row = query.FirstOrDefault(); 
1

嘗試這個,不能測試

 var firstItem = (
         from vmm in db.VotingMatrixMember 
         join vm in db.VotingMatrix on vmm.VotingMatrixID equals vm.ID 
         where vm.EventID = "abbe3077-24de-45d8-ac04-13dba97c1567" 
               && vm.Deleted = 0 
               && vmm.Deleted = 0 
         group new {vm, vmm} by new {vm.EventID, vmm.VotingMatrixID} into gr 
         select new 
         { 
          EventID = gr.Key.EventID, 
          VotingMatrixID = gr.Key.VotingMatrixID, 
          PersonAcceptedCount = gr.Sum(x => Convert.ToInt32(x.IsAccepted)) 
         } 
         into groupedItem 
         orderby groupedItem.PersonAcceptedCount descending 
         select groupedItem        
         ).FirstOrDefault(); 
+0

@大衛B:經過一些修改這適用於我。謝謝你們倆! –