首页 文章

Linby中的Groupby和where子句

提问于
浏览
1

我是Linq的新手 . 我正在尝试编写一个linq查询来从一组记录中获取最小值 . 我需要在同一个查询中使用groupby,where,select和min函数,但是在使用group by子句时我遇到了问题 . 这是我写的查询

var data =newTrips.groupby (x => x.TripPath.TripPathLink.Link.Road.Name)
                  .Where(x => x.TripPath.PathNumber == pathnum)
                  .Select(x => x.TripPath.TripPathLink.Link.Speed).Min();

我不能一起使用group by,它一直在给错误 .

我的查询应该

  • 选择所有值 .

  • 通过where子句(pathnum)对其进行过滤 .

  • Groupby the road名称

  • 终于得到最小值 .

有人可以告诉我我做错了什么,以及如何达到预期的结果 .

谢谢,Pawan

2 回答

  • 5

    不知道数据之间的关系有点棘手,但我认为(没有尝试)这应该给你想要的 - 按名称的每条道路的最低速度 . 请注意,它将生成具有Name和Speed属性的匿名对象的集合 .

    var data = newTrips.Where(x => x.TripPath.PathNumber == pathnum)
                       .Select(x => x.TripPath.TripPathLink.Link)
                       .GroupBy(x => x.Road.Name)
                       .Select(g => new { Name = g.Key, Speed = g.Min(l => l.Speed) } );
    
  • 0

    因为我认为你想要具有最低速度而不是速度的Trip,并且我假设一个不同的数据结构,我将添加到tvanfosson的答案:

    var pathnum = 1;
    var trips = from trip in newTrips
                where trip.TripPath.PathNumber == pathnum
                group trip by trip.TripPath.TripPathLink.Link.Road.Name into g
                let minSpeed = g.Min(t => t.TripPath.TripPathLink.Link.Speed)
                select new { 
                    Name = g.Key, 
                    Trip = g.Single(t => t.TripPath.TripPathLink.Link.Speed == minSpeed) };
    
    foreach (var t in trips)
    {
        Console.WriteLine("Name = {0}, TripId = {1}", t.Name, t.Trip.TripId);
    }
    

相关问题