2013-04-29 8 views
0

Я новичок в linq и не понимаю, как использовать группу по заказу, и при использовании Distinct у вас нет возможности заказать заказ. Это SQL, я хотел бы преобразовать в LINQ:Как использовать Группу по порядку в 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() 

Это то, что я пытался для группировки , что дало мне 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, чтобы дать мне один результат таблицы персонала, умножу ценить это.

+0

'Group Join'? Вы уверены в синтаксисе? – MarcinJuraszek

+0

@MarcinJuraszek вот как вы делаете «GroupJoin» в VB. ('join ... in' in C#) –

+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

Я хочу, чтобы этот запрос предоставил мне список имен, которые не имеют повторяющегося значения, упорядоченного по имени и имени. –

+0

Я добавил код, как было предложено выше, и список по-прежнему не сортирован (From sl In _db.Staffs _ Присоединиться к e In _db.Entities On e.FANo Equals sl.FaNo _ Присоединиться к ubl В _db.UserBldgLists На ubl.EntID Equals e.EntID _ Где (ubl.UserID = Param1) Порядок по sl.LastName, sl.FirstName _ Выберите sl) .Distinct() –

+0

Попробуйте заказать после отчетливого. Поставщик Linq, который вы используете, может не сохранять первоначальный порядок, когда вы вызываете «Distinct» (как мне кажется, Linq-to-SQL). –

Смежные вопросы