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);
我试图避免在以下情况下对 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);