LINQ OrderBy 和 Where 组合

LINQ OrderBy and Where combined

我试图避免在以下情况下对 DistanceTo 方法进行多次检查:

public IEnumerable<Object> NearbyObjects => Objects.Where(o => a.DistanceTo(o) < 10).OrderBy(o => a.DistanceTo(o));

public IEnumerable<Object> NearbyObjects => Objects.OrderBy(o => a.DistanceTo(o)).TakeWhile(o => a.DistanceTo(o) < 10);

无论如何我必须使用DistanceTo方法两次。可以在 LINQ 中避免这种情况吗?

您可以像这样在 linq 查询语法中使用 let 语句:

public IEnumerable<Object> NearbyObjects =>
   from o in Objects
   let distanceTo = a.DistanceTo(o) 
   where distanceTo < 10
   orderby distanceTo 
   select o;

如果你想使用方法语法,你将不得不暂时投射到匿名类型

public IEnumerable<Object> NearbyObjects =>
   Objects.Select(o => new { o, distanceTo = a.DistanceTo(o) })
          .Where(o => o.distanceTo < 10)
          .OrderBy(o => o.distanceTo)
          .Select(o => o.o);