我是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一起导致错误。
我的查询应该
有人可以告诉我我做错了什么以及如何达到预期效果。
谢谢, 爬完
答案 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);
}