LINQ Group By 多列并计算
LINQ Group By multiple columns and also count
我的 .NET Core 应用程序中有以下 LINQ 代码。我将 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();
当代码尝试 运行 最后一行时,出现以下异常。
Could not parse expression 'g.ToList()': This overload of the method 'System.Linq.Enumerable.ToList' is currently not supported.
我错过了什么?
使用 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()
我的 .NET Core 应用程序中有以下 LINQ 代码。我将 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();
当代码尝试 运行 最后一行时,出现以下异常。
Could not parse expression 'g.ToList()': This overload of the method 'System.Linq.Enumerable.ToList' is currently not supported.
我错过了什么?
使用 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()