2011-06-17 18 views
9

Belirli bir mesafe içinde depoları filtrelemeye ve ayrıca mesafe hesaplama sonucuna göre sipariş vermem gereken basit bir linq sorgum var.Linq: Aynı yöntemi nereden ve sipariş için iki kez yerine yalnızca bir kez mi çağırıyorsunuz?

Bu nedenle, GetDistance yöntemini şimdilik iki kez aradım. Kodu yalnızca mağaza başına bir kez aramak için nasıl optimize edebilirim?

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

cevap

12

bazı insanlar (ben) kolay okunur bulmak Yuriy cevabı bir eşdeğerdir:

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

derleyici sadece çok Yuriy koduna benziyor koduna bu çevirir.

+0

Teşekkür ederim, ben linq'de n00b yaşıyorum! –

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 ... bana bunu yap. –

+0

Tek seçimle yapmak mümkün mü, performansı etkiler mi? –