代码之家  ›  专栏  ›  技术社区  ›  J86

LINQ按多列分组,也可计数

  •  0
  • J86  · 技术社区  · 7 年前

    我的.NET核心应用程序中有以下LINQ代码。我使用efcore和pomero作为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 回复  |  直到 6 年前
        1
  •  2
  •   George Paoli    7 年前

    使用 g、 计数()

    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();
    
        2
  •  0
  •   Vladimir Kniazkov    7 年前

    我想你应该在这里选择许多:

    g.SelectToMany(gr => gr).ToList().Count()