2011-06-17 9 views
9

私は、特定の距離内の店舗をフィルタリングし、距離計算結果で注文する必要がある簡単なlinqクエリを持っています。Linq:WhereとOrderByに同じメソッドを2回ではなく1回だけ呼び出しますか?

私はGetDistanceメソッドを今度は2回呼び出しました。ストアごとに一度しか呼び出さないようにコードを最適化するにはどうすればよいですか?

double distance = 50; 

var result = stores.Where<MyStore>(s => 
       Helper.GetDistance(lat, lon, s.Lat, s.Lon) <= distance) 
       .OrderBy(s => Helper.GetDistance(lat, lon, s.Lat, s.Lon)) 
       .ToList(); 

答えて

12

一部の人々は(私が)読みやすく見つけることユーリーの答えと同等です:

double maxDistance = 50; 
var query = from store in stores 
      let storeDistance = Helper.GetDistance(lat, lon, store.lat, store.lon) 
      where storeDistance < maxDistance 
      orderby storeDistance 
      select store; 
var result = query.ToList(); 

コンパイラは、単に多くのユーリーのコードのようなコードにこれを変換します。

+0

ありがとう、私はlinqでn00bです! –

12
var result = stores.Select(store => 
    new 
    { 
     distance = 
      StoreHelper.Current.GetDistance(latitude, longitude, store.Latitude.Value, store.Longitude.Value), 
     store 
    }) 
    .Where(a => a.distance <= distance) 
    .OrderBy(a => a.distance) 
    .Select(a => a.store) 
    .ToList(); 
+0

arg ...私にそれを打つ。 –

+0

1つで選択することは可能ですか?それはパフォーマンスに影響しますか? –

関連する問題