나는 Lambda에 대해 더 많은 연습을하지만, 나는 때때로 IQueryable을 사용하는 .AsQueryable();
을 사용하고 언젠가 .AsQueryable();
을 생략하고 IEnumerable을 사용하는 이유를 알지 못한다.IQueryable <T> vs IEnumerable <T> 람다 (선택 대상)?
나는 MSDN을 읽었으나 "표현식 트리 실행"이 장점이 아니라는 것을 알지 못합니다.
누구나 내게 설명 할 수 있습니까?
나는 Lambda에 대해 더 많은 연습을하지만, 나는 때때로 IQueryable을 사용하는 .AsQueryable();
을 사용하고 언젠가 .AsQueryable();
을 생략하고 IEnumerable을 사용하는 이유를 알지 못한다.IQueryable <T> vs IEnumerable <T> 람다 (선택 대상)?
나는 MSDN을 읽었으나 "표현식 트리 실행"이 장점이 아니라는 것을 알지 못합니다.
누구나 내게 설명 할 수 있습니까?
IQueryable은 IEnumerable을 구현하므로 IQueryable을 사용하면 방망이에서 IEnumerable로 수행 할 수있는 모든 작업을 수행 할 수 있습니다. IQueryables는 일부 람다 식을 기본 데이터 소스의 쿼리로 변환하는 것을 처리합니다.이 쿼리는 SQL 데이터베이스 나 개체 집합이 될 수 있습니다.
기본적으로 IQueryable 또는 IEnumerable 인 경우 일반적으로 한 가지 방법 또는 다른 방법으로 처리하지 않아야합니다.
사용자는 일반적으로 신경 쓸 필요가 없습니다. 실제로 데이터 소스의 구현 자입니다. 데이터 공급자가 IEnumerable을 구현하는 경우 기본적으로 개체 실행에 LINQ를 수행합니다. 즉 컬렉션에 대한 메모리 작업에 있습니다. IQueryable은 표현식이 실행되면 Linq2Sql, Linq2Xml 및 Linq2Entities가 수행하는 식 (일반적으로 열거 형)에 따라 표현식 트리를 대체 표현으로 변환하는 기능을 데이터 소스에 제공합니다.
IQueryable이 Expression을 노출하므로 최종 사용자가 돌볼 수있는 유일한 시간은 실행될 Expression 트리를 검사 할 수 있는지 여부입니다. 또 다른 용도는 공급자를 검사하는 것입니다. 그러나이 두 시나리오는 다른 쿼리 공급자의 구현자를 위해 예약되어 있어야하며 식을 변환하려고합니다. Linq의 요점은 사용되는 표현식 실행의 구현에 신경 쓰지 말아야한다는 것입니다.
나는 Arne Claassen에 동의하며, 데이터 소스가 제공하는 기본 구현에 대해 생각할 필요가있는 경우가 있습니다. 예를 들어, blog post을 확인하면 특정 시나리오에서 IEnumerable 및 IQueryable에 의해 생성 된 SQL이 다른 방식을 보여줍니다.