2013-04-29 1 views
0

저는 linq을 처음 사용하고 Group by 또는 Orders by를 사용하는 방법을 이해하지 못하고 Distinct를 사용할 때 주문할 권한이 없습니다.LINQ에서 그룹 및 주문 방법 사용 방법

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() 

이 내가이 그룹에 대해 뭘하려 : 이것은 내가 LINQ로 변환하고자하는 SQL입니다 즉 크게 나에게 누군가가 나에게 직원 테이블의 하나의 결과를 제공하기 위해 LINQ 그룹을 얻는 방법을 지적 할 수있는 경우

(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) 

내가 그것을 감사하겠습니다을 IQueryable 오류가 나는 것 주었다 고맙습니다.

+0

'그룹 Join'? 그 문법에 대해 확신합니까? – MarcinJuraszek

+0

@MarcinJuraszek 그건 VB에서'GroupJoin'을하는 방법입니다. (C#에서'join ... into') –

+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에 - 투 - 객체 사후 :

(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) 
+0

이 쿼리는 lastname 및 firstname으로 정렬 된 반복 값이없는 이름 목록을 제공합니다. –

+0

위 코드에서 제안한대로 코드를 추가했으며 목록은 여전히 ​​정렬되지 않았습니다. (From sl In _db.Staffs _ e _db.Entities On e.FANo 같음 sl.FaNo _ ubl In _db.UserBldgLists In ubl.EntID Equals e.EntID _ 여기서 (ubl.UserID = Param1) 주문자 : sl.LastName, sl.FirstName _ 선택) .Distinct() –

+0

별명 뒤에 주문하십시오. 당신이 사용하는 Linq 공급자는 Distinct를 호출 할 때 원래의 순서를 유지하지 못할 수도 있습니다 (Linq-to-SQL이 생각합니다). –