如何在LINQ中使用Group by和Order by

时间:2013-04-29 15:13:29

标签: linq linq-to-sql

我是linq的新手,并且不了解如何使用该组或按顺序使用该组,并且在使用Distinct时,您无法按顺序排序。 这是我想要转换为LINQ的SQL:

SELECT enrStaff.LastName, enrStaff.FirstName, enrStaff.MiddleInit, enrStaff.FaNo
FROM   usrUserBldgList INNER JOIN
   entEntity ON usrUserBldgList.EntID = entEntity.EntID INNER JOIN
   enrStaff ON entEntity.FANo = enrStaff.FaNo
WHERE     (usrUserBldgList.UserID = Param1)
GROUP BY enrStaff.LastName, enrStaff.FirstName, enrStaff.MiddleInit, enrStaff.FaNo

这是我在LINQ中尝试过的,但是列表不能通过

排序
(From sl In _db.Staffs _
      Join e In _db.Entities On e.FANo Equals sl.FaNo _
      Join ubl In _db.UserBldgLists On ubl.EntID Equals e.EntID _
      Where (ubl.UserID = Param1) _
      Select sl).Distinct()

这是我尝试进行分组,这给了我一个IQueryable错误

(From ubl In _db.UserBldgLists _
  Join e In _db.Entities On e.EntID Equals ubl.EntID _
  Where ubl.EntID = Param1 _
  Group Join sl In _db.Staffs On e.FANo Equals sl.FaNo _  
  Into staffers = Group _
  Select staffers)

如果有人能指出如何让LINQ小组给我一个Staff表的结果,我将不胜感激,我将非常感激。

1 个答案:

答案 0 :(得分:0)

由于您的SQL没有进行任何聚合,因此它有效地在分组条件中获取了一个独特的值列表,因此您的第一个查询应该有效。

您的原始查询没有做任何排序,因此不清楚您之后想要做什么。

要添加排序,您可以将其添加到查询语法部分:

(From sl In _db.Staffs _
      Join e In _db.Entities On e.FANo Equals sl.FaNo _
      Join ubl In _db.UserBldgLists On ubl.EntID Equals e.EntID _
      Where (ubl.UserID = Param1) _
      Order By sl.LastName, sl.FirstName _
      Select sl).Distinct()

事后使用Linq-to-Objects:

(From sl In _db.Staffs _
      Join e In _db.Entities On e.FANo Equals sl.FaNo _
      Join ubl In _db.UserBldgLists On ubl.EntID Equals e.EntID _
      Where (ubl.UserID = Param1) _
      Order By sl.LastName, sl.FirstName
      Select sl).Distinct() _
      .OrderBy(Function(o) o.LastName) _
      .ThenBy(Function(o) o.FirstName)