LINQ Group по нескольким столбцам, а также по количеству
У меня есть следующий код 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 ответа
Решение
Используйте 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();
Я думаю, что вы должны использовать здесь SelectToMany:
g.SelectToMany(gr => gr).ToList().Count()