Linby中的Groupby和where子句

时间:2010-11-30 02:30:58

标签: linq c#-4.0

我是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一起导致错误。

我的查询应该

  1. 选择所有值。
  2. 通过where子句(pathnum)过滤它。
  3. Groupby the road Name
  4. 最终得到最小值。
  5. 有人可以告诉我我做错了什么以及如何达到预期效果。

    谢谢, 爬完

2 个答案:

答案 0 :(得分:5)

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

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) } );

答案 1 :(得分: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);
}