데이터베이스를 쿼리하고이 데이터베이스에서 개체 목록을 생성합니다.IQueryable 또는 IList
일반적으로 내 비즈니스 계층에서는 IList 형식의 캐시 된 개체 목록을 반환합니다. IQueryable을 반환하기 위해이를 변경하면 이러한 이점은 무엇입니까? IQueryable이 IList가 제공하지 않는 것은 무엇입니까?
데이터베이스를 쿼리하고이 데이터베이스에서 개체 목록을 생성합니다.IQueryable 또는 IList
일반적으로 내 비즈니스 계층에서는 IList 형식의 캐시 된 개체 목록을 반환합니다. IQueryable을 반환하기 위해이를 변경하면 이러한 이점은 무엇입니까? IQueryable이 IList가 제공하지 않는 것은 무엇입니까?
데이터베이스를 쿼리하는 데 사용할 예정이라면 IQueryable이 더 유용하다고 생각합니다. APrta에서 IList를 사용하여 목록에서 특정 항목을 추가, 제거, 가져올 수 있습니다. 그것은 모두 당신이 그것을 사용하는 방법에 따라 달라집니다 ..
당신은 IEnumerable<T>
을 반환 한 후 캐스팅 수 중 더 유연하게 ...하지만 IQueryable<T>
당신은 말 그대로 데이터베이스를 조회 할 실행을위한 더 나은 방법입니다합니다. 컬렉션을 조작하는 기능을 원할 경우 IList<T>
IQueryable은 데이터베이스를 쿼리하는 데 사용되는 인터페이스이며 구현자가 지연 실행 및 최적화 된 쿼리 작성과 같은 깔끔한 작업을 수행 할 수있는 기능을 정의합니다. 표현 트리를 평가함으로써). IList는 당신에게 그 누구도주지 않습니다.
또한 IQueryable은 읽기 전용 인터페이스입니다 (대부분). IList는 사용자가 컬렉션을 수정할 수 있도록하는 Add, Remove 등을 정의합니다. 그것이 의미 론적으로 이해된다면, 모든 것을 사용하여 IEnumerable Linq 확장을 사용하여 IQueryable의 기능 대부분을 얻으십시오.
모든 반환 형식에 IEnumerable을 사용하고 싶습니다. 단순한 경우에는이를 반환하는 메서드에서 List로 구현하거나 필요하면 구체화 된 구체적인 클래스를 구현합니다. 장점은, 드물게 IEnumerable을 구현하는 클래스의 클라이언트를 변경해야하는 경우입니다. 목록 또는 해시 테이블인지 상관하지 않습니다. IList를 사용하면 목록을 사용하여 문제가 발생합니다.
그러나 LINQ-to-SQL을 사용하거나 클래스에서 많은 양의 데이터로 작업하는 경우 IQueryable은 IEnumerable에서 지원하지 않는 일부 메서드를 지원합니다. 는 IEnumerable은 IList의와 된 IQueryable의 기본 구현, 그래서 내가 사용하는 것이 좋습니다 이유입니다 대부분의 기능
체크 아웃 된 IQueryable 및 IEnumerable을 사이의 차이의 좋은 설명은이 기사에서 수익 유형으로 :
Returning IEnumerable<T> vs. IQueryable<T> 을 및 What is the difference between IQueryable<T> and IEnumerable<T>?