我有一个简单的linq查询,我需要过滤一定距离内的存储,并按距离计算结果进行排序,您就知道了。

因此,我现在结束了两次调用GetDistance方法的操作。如何优化代码以在每个商店中仅调用一次?

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

最佳答案

某些人(我)觉得Yuriy的答案等同于更容易阅读:

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

编译器将其简单地转换为看起来类似于Yuriy的代码的代码。

关于c# - Linq:对于Where和OrderBy调用相同的方法仅一次而不是两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6392503/

10-13 06:05