2012-10-30 7 views
2

데이터베이스를 쿼리하고이 데이터베이스에서 개체 목록을 생성합니다.IQueryable 또는 IList

일반적으로 내 비즈니스 계층에서는 IList 형식의 캐시 된 개체 목록을 반환합니다. IQueryable을 반환하기 위해이를 변경하면 이러한 이점은 무엇입니까? IQueryable이 IList가 제공하지 않는 것은 무엇입니까?

답변

0

데이터베이스를 쿼리하는 데 사용할 예정이라면 IQueryable이 더 유용하다고 생각합니다. APrta에서 IList를 사용하여 목록에서 특정 항목을 추가, 제거, 가져올 수 있습니다. 그것은 모두 당신이 그것을 사용하는 방법에 따라 달라집니다 ..

0

당신은 IEnumerable<T>을 반환 한 후 캐스팅 수 중 더 유연하게 ...하지만 IQueryable<T> 당신은 말 그대로 데이터베이스를 조회 할 실행을위한 더 나은 방법입니다합니다. 컬렉션을 조작하는 기능을 원할 경우 IList<T>

4

IQueryable은 데이터베이스를 쿼리하는 데 사용되는 인터페이스이며 구현자가 지연 실행 및 최적화 된 쿼리 작성과 같은 깔끔한 작업을 수행 할 수있는 기능을 정의합니다. 표현 트리를 평가함으로써). IList는 당신에게 그 누구도주지 않습니다.

또한 IQueryable은 읽기 전용 인터페이스입니다 (대부분). IList는 사용자가 컬렉션을 수정할 수 있도록하는 Add, Remove 등을 정의합니다. 그것이 의미 론적으로 이해된다면, 모든 것을 사용하여 IEnumerable Linq 확장을 사용하여 IQueryable의 기능 대부분을 얻으십시오.

0

모든 반환 형식에 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>?