2010-11-30 65 views
0

我是Linq的新手。我正在嘗試編寫一個linq查詢來從一組記錄中獲取最小值。我需要使用groupby,其中,select和min函數在同一個查詢中,但我在使用group by子句時遇到問題。這裏是我寫的查詢Groupby和Linq中的where子句

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路名
  4. 終於得到最小值。

有人能告訴我我做錯了什麼以及如何達到預期的結果。

感謝, 爬完

+1

什麼錯誤,並且這是LINQ to SQL還是什麼? – 2010-11-30 02:37:43

回答

4

這是一個有點棘手,不知道數據之間的關係,但我認爲(但不嘗試的話),這應該給你想你想 - 按名稱每路的最小速度。請注意,它將導致收集具有名稱和速度屬性的匿名對象。

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

我得到的對象引用未設置爲對象錯誤的實例執行foreach循環以獲得結果 – Pawan 2010-11-30 04:29:21

+0

得到它的工作。謝謝你的幫助 – Pawan 2010-11-30 05:22:25

0

因爲我想你想擁有的最小速度,而不是速度旅行,和我假設不同的數據結構,我會添加到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); 
}