Агрегирование в подменю selectmany с использованием LINQ - PullRequest
1 голос
/ 11 декабря 2011

Я реализую некоторые базовые функции ранжирования в своем приложении MVC, но я сталкиваюсь с некоторыми странными ошибками при выполнении этого запроса:

Цель этого запроса - найти 10 лучших гонщиков с самым длинным общее время - т.е. сумма всех кругов, пройденных каждым гонщиком.

var topRiders = from rider in _riderDataProvider.GetAll()
                orderby
                    (from session in rider.Sessions
                     from lap in session.Laps
                     select lap.LapTime.TotalSeconds)
                     .Sum()
                descending
                select rider;
var result = topRiders.Take(10).ToArray();

Однако выполнение запроса выдает:

System.Data.SqlClient.SqlException: только одно выражение может быть указано в списке выбора, если подзапрос не введен с EXISTS.

Честно говоря, я понятия не имею, что означает это исключение или как его исправить. Есть тонкая ошибка, которую я пропускаю, или я превысил возможности LINQ to SQL? (Я могу переписать запрос в SQL, если это так, но я бы предпочел не делать этого.)

1 Ответ

1 голос
/ 11 декабря 2011

Я бы попробовал что-то вроде этого

var topRiders = from rider in _riderDataProvider.GetAll()
                select new {
                   Rider = rider,
                   TotalTime = (from session in rider.Sessions
                     from lap in session.Laps
                     select lap.LapTime.TotalSeconds)
                     .Sum(),
                }

var result = topRiders.OrderByDescending(r=>r.TotalTime)
                      .Select(r=>r.Rider)
                      .Take(10).ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...