2017-01-26 11 views
1

나는 다음과 같은 상황에서 DistanceTo 방법의 여러 검사를 피하기 위해 노력하고있어 결합 장소 :LINQ있는 OrderBy 및

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

또는 내가 DistanceTo 방법을 두 번 사용할 필요가있는 경우

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

. LINQ에서이를 피할 수 있습니까?

답변

3

이 같은 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); 
에 투사 할 것이다