LINQ 쿼리에서 두 개의 "where"절 또는 "&&"를 가지고 있습니까?
여러 "와"조건을 사용하여 LINQ를 작성할 때 쿼리 각보기 조건에 대해 하나씩 또는 여러 where
절을 포함 하는 one- 절을 작성해야 우리 합니까?&&
where
static void Main(string[] args)
{
var ints = new List<int>(Enumerable.Range(-10, 20));
var positiveEvensA = from i in ints
where (i > 0) && ((i % 2) == 0)
select i;
var positiveEvensB = from i in ints
where i > 0
where (i % 2) == 0
select i;
System.Diagnostics.Debug.Assert(positiveEvensA.Count() ==
positiveEvensB.Count());
}
positiveEvensA 와 positiveEvensB 사이 에 개인적인 취향이나 코딩 스타일 (긴 줄, 가독성 등) 외에 다른 점이?
떠오르는 한 가지 가능한 차이점은 다른 LINQ 공급자가 where
더 복잡한식이 아닌 여러 s 에 더 잘 대처할 수있는 것입니다. 이것이 사실입니까?
나는 개인적으로 사용할 때마다 항상 && 대 두 가지를 사용합니다.
귀하의 경우에는 전혀 눈에 만나지 않을 것입니다. 그러나 2 개의 경우에는 모든 결과를 사용하는 경우 성능에 영향을 미칠 것입니다. 예를 들어, 결과에 대해 .Count ()를 호출하거나 전체 목록을 반복하는 경우 첫 번째 항목에서 절이 실행되어 두 번째 대리 튼 사용하여 다시 완전히 열거 될 새 IEnumerable을 만듭니다.
두 절을 함께 연결하면 쿼리가 컬렉션이 열거 될 때 실행되는 단일 대리 튼 형성됩니다. 결과적으로 컬렉션을 통해 하나의 열거가 생성되고 결과가 반환 될 때마다 대리자에 대한 하나의 호출이 생성됩니다.
분할하면 상황이 바둑니다. 첫 번째 항목에서 절은 원본 컬렉션을 열거하고 두 번째에서 절은 결과를 열거합니다. 이로 외장으로 (최악의 경우) 컬렉션을 모두 2 개의 전체 열거와 구성 원당 2 개의 델리게이트가 호출됩니다. 이것은 문이 (이론적으로) 가동 속도의 2 배를 실현할 수 있습니다.
2 개의 절을 사용하기로 결정한 경우 더 제한적인 절을 먼저 배치하면 두 번째에서 첫 번째 전달하는 요소에서 실행되기 때문에 상당히 도움이됩니다.
자, 귀하의 경우 중요하지 않습니다. 컬렉션 컬렉션에서는 가능합니다. 일반적으로 다음을 수행합니다.
1) 가독성 및 유지 보수성
2) 성능
이 경우 두 옵션 모두 똑같이 유지 관리 할 수 있다고 생각합니다 더 성능이 좋은 옵션을 선택합니다.
이것은 대부분의 개인적인 스타일 문제입니다. 개인적으로 where
조항이 한 줄에 한 조항을 그룹화합니다.
여러 개의 많은 것을 where
사용하면 멀리 만드는 모든 요소에 대해 추가로 델리게이트 호출이 필요하기 때문에 성능이 경향이 있습니다. 그러나 사소한 문제 일 가능성이 높으며 러가 문제로 보이는 경우에만 그렇습니다.
성능 문제는 메모리 기반 컬렉션에만 적용됩니다. Linq to SQL은 실행을 지연시키는 방법 트리를 생성합니다. 자세한 내용은 여기 :
다른 사람들이 제안한 것처럼 그것은 개인적인 취향에 가깝습니다. 더 읽기 주류 주류의 구문을 모방하기 때문에 && 사용을 좋아합니다.
참고 URL : https://stackoverflow.com/questions/664683/should-i-use-two-where-clauses-or-in-my-linq-query
'ProgramingTip' 카테고리의 다른 글
함수를 호출하는 백틱 (0) | 2020.11.02 |
---|---|
MySQL 테이블에 여러 행을 삽입하고 새 ID를 지불해야합니까? (0) | 2020.11.02 |
SQL Server에서 datetime과 날짜 만 비교하는 방법 (0) | 2020.11.01 |
Asp.Net WebApi2 AspNet.WebApi.Cors 5.2.3에서 작동하지 않는 CORS 활성화 (0) | 2020.11.01 |
가져 오기 오기를 기본 인증? (0) | 2020.11.01 |