Linq to SQL: группировка по и сумма () - PullRequest
2 голосов
/ 10 августа 2010

Я очень плохо знаком с linq, поэтому ответить на него будет довольно легко, но мне было трудно найти ответ.

У меня есть следующий оператор LINQ, который выполняет простой запрос linq и назначает метки результирующих значений в веб-форме asp.net:

        Dim db As New MeetingManagerDataContext
    Dim q = From s In db.vwRoomAvailabilities _
                Where s.MeetingID = lblMeetingID.Text _
                Select s.AllRequestedSingles, s.AllRequestedDoubles, s.AllBookedSingles, s.AllBookedDoubles, SinglesNeeded = s.AllRequestedSingles - s.AllBookedDoubles, DoublesNeeded = s.AllRequestedDoubles - s.AllBookedDoubles

    lblSinglesRequested.Text = "Singles Requested: " & q.FirstOrDefault.AllRequestedSingles
    lblSinglesBooked.Text = "Singles Booked: " & q.FirstOrDefault().AllBookedSingles
    lblSinglesNeeded.Text = "Singles Needed: " & q.FirstOrDefault().SinglesNeeded
    lblDoublesRequested.Text = "Doubles Requested: " & q.FirstOrDefault().AllRequestedDoubles
    lblDoublesBooked.Text = "Doubles Booked: " & q.FirstOrDefault().AllBookedDoubles
    lblDoublesNeeded.Text = "Doubles Needed: " & q.FirstOrDefault().DoublesNeeded

Первоначально должен был быть только один результат строки, и вы можете видеть, что я использую FirstOrDefault (), чтобы получить это единственное значение, которое прекрасно работает. Но дизайн изменился, и теперь запрос может возвращать несколько строк. Теперь мне нужно сгруппировать по идентификатору MeetingID выше и суммировать каждый из выбранных столбцов (т.е. s.AllRequestedDoubles).

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

Можете ли вы помочь мне изменить вышеприведенный LINQ для суммирования результирующих значений вместо того, чтобы просто показывать значения результатов первой строки?

1 Ответ

5 голосов
/ 10 августа 2010

Попробуйте это

From s In db.vwRoomAvailabilities
Where s.MeetingID = lblMeetingID.Text
Group by s.MeetingID 
into SumAllRequestedDoubles = sum(s.AllRequestedDoubles),
     SumAggregate2 = sum(s.SomeField2),
     SumAggregate3 = sum(s.SomeField3)
Select SumAllRequestedDoubles, SumAggregate2, SumAggregate3

Это поможет вам выполнить СУММУ для этого единственного столбца.

Вам необходимо спроецировать каждый столбец SUM'd в новый столбец с псевдонимами (как я делал выше).

Кроме того, поскольку вы новичок в LINQ-SQL, посмотрите LinqPad - он потрясет ваш мир.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...