2014-10-30 3 views
-2

У меня есть этот Linq запрос, который я хочу, чтобы включить группу по некоторым конкретным областям:включают группу, в C# Linq запрос

from x in db.Schedule 
join y in db.Schedule on x.ID equals y.ID - 1 
join z in db.Locations on x.Line.ToString() + '-' + x.Expedition equals z.LocationCode 
where Convert.ToInt32(y.StopOrder) >= Convert.ToInt32(x.StopOrder) && x.NameOfTown == departingBusStation && dest.Contains(x.Line) 
where x.NameOfTown == departingBusStation 
select new { x.NameOfLine, x.DepartureTime, x.DestBusStationCode, x.StopOrder, z.LocationID } 

В этом Linq запрос я хочу, чтобы добавить группу по x.DestBusStationCode и x.DepartureTime, но изменяя запрос к чему-то вроде этого:

from x in db.Schedule 
join y in db.Schedule on x.ID equals y.ID - 1 
join z in db.Locations on x.Line.ToString() + '-' + x.Expedition equals z.LocationCode 
where Convert.ToInt32(y.StopOrder) >= Convert.ToInt32(x.StopOrder) && x.NameOfTown == departingBusStation && dest.Contains(x.Line) 
where x.NameOfTown == departingBusStation 
orderby x.DepartureTime ascending 
group x by new {x.DepartureTime, x.DestBusStationCode} 
select new { x.NameOfLine, x.DepartureTime, x.DestBusStationCode, x.StopOrder, z.LocationID } 

Но я получаю несколько ошибок с этим подходом.

+1

Вместо того, чтобы просто использовать downvoting, по крайней мере, сообщите, что нить не указана, ПОЧЕМУ она была опущена? – Recipe

+1

@Recipe Пользователи не обязаны комментировать при downvoting, но даже не включая сообщение об ошибке, что код генерирует звуки, как хорошее место для начала для меня. Объедините это с отсутствием объяснения того, что должен делать код, и вопрос очень неопровержимый. – Servy

+0

скриншот с ошибками, которые я получаю: http://i.gyazo.com/67b2da21e7b42589b7035940959f637c.png – Laziale

ответ

0

Как только вы группируете что-то, вы можете использовать только эти свойства в своем выборе плюс любое совокупное значение, такое как Count и Sum. Это потому, что вы говорите, дайте мне одну строку, где сгруппированные по свойствам одинаковы, поэтому другие свойства могут иметь несколько значений для группы. Ниже будет группа по DepartureTime и DestBusStationCode

from x in db.Schedule 
       join y in db.Schedule on x.ID equals y.ID - 1 
       join z in db.Locations on x.Line.ToString() + '-' + x.Expedition equals z.LocationCode 
       where Convert.ToInt32(y.StopOrder) >= Convert.ToInt32(x.StopOrder) && x.NameOfTown == departingBusStation && dest.Contains(x.Line) 
       where x.NameOfTown == departingBusStation 
       orderby x.DepartureTime ascending 
       group x by new {x.DepartureTime, x.DestBusStationCode} grp 
       select new { grp.Key.DepartureTime, grp.Key.DestBusStationCode } 

Вы не можете больше не включать NameOfLine, StopOrder и LocationId в результатах, так как эти свойства могут отличаться в той или иной группе с тем же DepartueTime and DestBusStationCode`.

+0

Спасибо @ ben-robinson, поэтому каковы мои варианты выбора полей, которые у меня есть, но не имеют повторяющихся строк на основе DepartureTime и DestBusStationCode? – Laziale

+0

Если я вас правильно понимаю, вы не можете. Если у вас есть, например, 2 записи с одинаковыми параметрами DepartureTime и DestBusStationCode, каждая запись может иметь разные NameOfLine, StopOrder и LocationId. –

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