2014-02-26 91 views
2

我确实有一个我不能转换成linq的sql脚本。愿你们中的一人能帮助我找到正确的方向。如何将SQL脚本转换为Linq

我的大问题是数量和由群:

SELECT 
    wfs.ServerId, 
    COUNT(wfss.Name) AS Records, 
    wfs.DiskId 
FROM WorkflowStep wfs 
INNER JOIN WorkflowStepStatus wfss ON wfs.WorkflowStepStatusId = wfss.Id 
WHERE wfs.WorkflowId = (
          SELECT 
           Id 
          FROM Workflow wf 
          WHERE wf.Name = 'Collecting data virutal' 
         ) 
AND wfs.StepNumber IN (1, 2, 3) 
AND wfss.Name = 'Processed' 
GROUP BY wfs.ServerId, 
      wfss.Name, 
      wfs.DiskId 
+0

你能告诉类模型,那么导航属性和关联的多重性是可见的?另外,请告诉这应该是哪种LINQ味道。你试过Linqer了吗? –

+0

你不能比较'wfs.WorkflowId'和'(SELECT Id FROM Workflow wf WHERE wf.Name ='Collecting data virutal')''你需要使用'IN'运算符,就像'wfs.WorkflowId IN(SELECT Id从工作流wf WHERE wf.Name ='收集数据virutal')',我说得对吗? –

回答

1

这应该工作

var result = wfs.Join(wfss, 
    t => t.WorkflowStepStatusId, 
    u => u.ID, 
    (t, u) => new { 
     t.ServerID, 
     t.WorkflowId, 
     t.StepNumber, 
     u.Name, 
     t.DiskID 
    }) 
    .Where(t => t.WorkflowId == wf.FirstOrDefault(u => u.Name == "Collecting data virutal").ID && 
       t.Name == "Processed" && 
       new List<int> { 1, 2, 3 }.ToArray().Contains(t.StepNumber)) 
    .GroupBy(t => new { t.ServerID, t.Name, t.DiskID }) 
    .Select(t => new { 
     t.Key.ServerID, 
     Records = t.Key.Name.Count(), 
     t.Key.DiskID 
    }) 
    .ToList(); 
+0

一个简单的更正:'t.Key.Name'没有'Count'方法,而不是't.Key.Name.Count()',你可以试试'Records = t.Count()' –