2010-11-30 15 views
0

私はLinqの初心者です。私はレコードのセットから最小値を取得するために、linqクエリを記述しようとしています。私はgroupbyを使用する必要があります。ここではselectとminは同じクエリで機能しますが、group by節を使用すると問題が発生します。ここに私が書いた質問がありますLinqのGroupbyと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(); 

私はグループを一緒に使うことができず、一緒にエラーを出し続けています。

私のクエリは

  1. は、すべての値を選択する必要があります。
  2. where句(pathnum)でフィルタリングします。
  3. グループバイロード
  4. 最終的に最小値を取得します。

私が間違っていることと希望する結果を達成する方法を教えてください。道路あたりの最低速度を名前で - これはあなたが欲しい欲しい与えるべきであることを

おかげで、 Pawan

+1

何エラーは、このLINQ SQLまたは何ですか? –

答えて

4

は、これは、データ間の関係を知らない少しトリッキーですが、私は(それをしようとせず)と思います。 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

結果を得るためにforeachループを実行すると、オブジェクト参照がオブジェクトエラーのインスタンスに設定されません。 – Pawan

+0

が動作するようになりました。おかげでヘルプの人 – Pawan

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

私はRichardとtvanfossonの両方の方法を試してみました。オブジェクトのインスタンスに設定されていないオブジェクト参照を私に与えてくれました。これは各ループで起こった。 – Pawan