2012-03-15 5 views
0

linq에서 select를 반환 할 때 사용할 목록 아래에 무엇이 있는지 혼란스러워합니다.linq의 select 쿼리를 반환하는 모범 사례

1.IEnumerable 2.List 3.ObjectQuery 4. ConvertLinqtoDataTable는

어느 당신이 선호합니까?

현재 우리는 레코드를 반환 할 때 객체 쿼리에 사용됩니다.

public ObjectQuery StationSelectByStationId(int stationid) 
    { 
     var query = from station in _iiqrEntities.Station 
        where station.StationId == stationid 
        select station; 

     return query as ObjectQuery; 
    } 

코드를 표준화하기 위해 귀하의 권장 사항을 사용하겠습니다. 위의 코드를 기반으로 답변을 참조하십시오. 안부에서

덕분에

답변

3

IQueryable<T>을 반환해야합니다.
소비자는 인터페이스를 EF에 연결하지 않고도 소비자가 SQL 쿼리에 예측을 추가 할 수 있습니다.

1

당신은 항상 가장 제한적인 데이터가 당신이 할 수있는 입력 반환해야합니다. 그것은 미래에 가장 큰 유연성을 허용하고 커플 링을 감소시킵니다.

아키텍처에 따라 LINQ 체인을 수행하려는 경우 IQueryable<T> 일 수 있습니다. 또는 DTO를 IEnumerable<T>과 같이 강력하게 형식화 된 객체 모음을 반환 할 수 있습니다.

IEnumerable은 메모리에서 반복되는 시퀀스 작업에 적합하지만 IQueryable은 데이터베이스 나 웹 서비스와 같은 메모리 부족 문제를 허용합니다.

+0

아니오; 'IQueryable'. 이렇게하면 SQL 연결이 가능합니다. – SLaks

+0

@SLaks : 예, 맞습니다. 좀 더 구체적으로 대답을 수정하겠습니다. – msigman

0

문제의 데이터 크기와 함께 수행 할 작업에 따라 다릅니다. IQueryable은 나중에 쿼리를 수정할 수 있지만 복잡한 쿼리를 사용하는 대규모 데이터 세트의 경우 성능이 크게 떨어질 수 있습니다. 이와 같은 상황에서 나는 목록을 반환하고 두통을 피하는 것을 선호하지만, IQueryable을 고수하기로 결정했다면 거대한 성능 히트없이 평가되는지 확인해야합니다.