2013-04-22 294 views
2

我有我认为是一个复杂的SQL查询,我需要将它转换为LINQ查询。但是,我只是LINQ的初学者,并不知道如何才能正常工作。我试过搜索互联网,但仍无法使其正常工作。C#将SQL查询转换为LINQ

这里是我的SQL查询:

SELECT 
    a.empid, 
    CAST(IF(COUNT(*) > 10,FLOOR(COUNT(*)/10),1) AS CHAR(100)) lim, 
    CAST(GROUP_CONCAT(internalid) AS CHAR) internalIDS 
FROM tblLogs a 
INNER JOIN 
    (
     SELECT 
      DISTINCT empid 
     FROM tblLogs 
     WHERE IsDeleted = 0 AND DateAdded = 2013-04-18 
    ) b ON a.empid = b.empid 
WHERE IsDeleted = 0 AND Remarks NOT LIKE '%proxy date used%' AND DateAdded = 2013-04-18 AND RecType = 8 
GROUP BY empid; 

嗨。这里是我更新的linq查询,但是它返回一个错误Linq,Entities不能识别方法string.join。这有什么问题?谢谢。 :)

var rows = from rec in context.tblWMSLogs join rec1 
         in context.tblWMSLogs.Where(t => t.DateAdded == refDate2 && t.IsDeleted == 0) 
         on rec.EmpID equals rec1.EmpID 
        where rec.DateAdded == refDate2 && rec.IsDeleted == 0 && !rec.Remarks.Contains("proxy date used") && rec.RecType == recType 
        group rec by rec.EmpID into g 
        select new WMSRandomViewModel 
        { 
         EmpID = g.Key, 
         Lim = (g.Count() > 10 ? Math.Ceiling(g.Count()/10d) : 1), 
         InternalIDs = string.Join(",", g.OrderBy(s => s.InternalID).Select(s => s.InternalID)) 
        };//string.Join(",", g.OrderBy(s => s.InternalID).Select(s => s.InternalID)) 
      //return rows.ToList(); 
      return rows.ToList(); 
+0

您尝试编译吗?如果是这样,它会给你你想要的东西吗?你的问题到底是什么? – ean5533 2013-04-22 03:25:14

回答

1

这就像你想要的?

var rows = 
     from rec in context.tblLogs.AsEnumerable() 
     join rec1 
      in context.Where(t => t.DateAdded == refDate && t.IsDeleted == 0) 
      on rec.EmpID equals rec1.EmpID 
     where rec.DateAdded == refDate && rec.IsDeleted == 0 && !rec.Remarks.Contains("proxy date used") && rec.RecType == recType 
     group rec by rec.EmpID into g 
     select new 
     { 
      g.Key, 
      lim = (g.Count() > 10 ? Math.Floor(g.Count()/10d) : 1).ToString(), 
      InternalIDS = string.Join("", g.OrderBy(s => s.InternalId).Select(s => s.InternalId)) 
     }; 

现在,我的问题,

为什么有内您的SQL加入?内连接中的where子句可以移动到主查询的where子句中

+0

嗨。有一个内部联接,因为数据可能来自不同的表。 – finnTheHumin 2013-04-22 05:29:04

+0

啊〜好吧,所以tblLogs表可能是不同的表? – 2013-04-22 05:30:07

+0

我更新了我的答案,查看了 – 2013-04-22 05:41:10