LINQ Group по нескольким столбцам, а также по количеству - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть следующий код LINQ в моем приложении .NET Core.Я использую EF Core с Pomelo в качестве драйвера для MySQL.

var journeyId = 5917;
var journey = Journeys.FirstOrDefault(j => j.JourneyId == journeyId);

var journeyEvents = from ad in AccelerometerData
                    join ae in AccelerometerEvents on ad.AccelerometerDataId equals ae
                        .AccelerometerData.AccelerometerDataId
                    where ad.Device.DeviceId == journey.Device.DeviceId && ae.TimeStamp >= journey.StartDateTime &&
                          ae.TimeStamp <= journey.EndDateTime
                    group ae by new
                    {
                        ae.EventType,
                        ae.Level
                    } into g
                    select new
                    {
                        EventType = new JourneyEventType { JourneyEventTypeId = g.Key.EventType },
                        Level = g.Key.Level,
                        Count = g.ToList().Count()
                    };

journey.JourneyEvents = journeyEvents.ToList();

Когда код пытается выполнить последнюю строку, я получаю следующее исключение.

Не удалось разобрать выражение'g.ToList ()': эта перегрузка метода 'System.Linq.Enumerable.ToList' в настоящее время не поддерживается.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Я думаю, что вы должны использовать здесь SelectToMany:

g.SelectToMany(gr => gr).ToList().Count()
0 голосов
/ 22 ноября 2018

Используйте g.Count () вместо g.ToList (). Count ().

var journeyEvents = from ad in AccelerometerData
                    join ae in AccelerometerEvents on ad.AccelerometerDataId equals ae
                        .AccelerometerData.AccelerometerDataId
                    where ad.Device.DeviceId == journey.Device.DeviceId && ae.TimeStamp >= journey.StartDateTime &&
                          ae.TimeStamp <= journey.EndDateTime
                    group ae by new
                    {
                        ae.EventType,
                        ae.Level
                    } into g
                    select new
                    {
                        EventType = new JourneyEventType { JourneyEventTypeId = g.Key.EventType },
                        Level = g.Key.Level,
                        Count = g.Count()
                    };

journey.JourneyEvents = journeyEvents.ToList();
...