2011-03-30 4 views
2

GetAll() 등의 목록에 IList<T> 등의 리포지토리 계층이 잘 작동하고 있습니다. 그러나 LINQ 쿼리 중 하나에서 OrderBy을 사용하려고했습니다. 그런 다음 LINQ 쿼리를 IList으로 변환 할 수 없기 때문에 큰 문제가 발생했습니다. IOrderedEnumerable을 반환하려고합니다.LINQ/EF에서 순서가 지정된 쿼리로 IList를 반환하는 방법

내 레포 자체를 보관하고 아니요,을 내 서비스에 노출하기 때문에 이것은 큰 문제입니다. 'orderby'때문에 내 repo 아키텍처를 변경해야하는 이유는 무엇입니까?

그럼에도 불구하고 나는 내 저장소 레이어를 IEnumerable을 반환하도록 설정 했으므로 적어도 정렬 된 데이터를 반환 할 수 있습니다. 그런 다음 내 데이터 클래스를 IEnumerable으로 변환해야하므로 내 뷰 모델과 데이터 모델 클래스간에 쉽게 매핑 할 수 있으므로 더 많은 문제가 발생했습니다. (이것은 AutoMapper를 사용하고 있습니다).

그런 다음 코드 우선은 IEnumerable을 좋아하지 않으며 적어도 IList (및 또한 ICollection?라고 말함)을 사용하여 정의되지 않은 테이블 간의 관계를 구축하지 않는다는 것을 깨달았습니다.

여기 내 질문은 무엇입니까? 내가하고 싶은 것은 내 응용 프로그램을 통해 리턴 유형을 변경하지 않고 순서대로 클라이언트 (이 경우 서비스)에 데이터를 반환하는 것뿐입니다.

+2

당신이하고 싶은 부분과 작동하지 않는 부분의 실제 코드 예제를 보여 주면 도움이 될 것입니다. –

+2

당신도 당신을 만족하지 못하는 해결책을 가지고있는 이전 질문에 대한 링크를 게시해야합니다 : http://stackoverflow.com/questions/5487115/how-do-i-order-an-underlying-child-collection- 부모 - 클래스 - 인 - 린크 - 람다 –

+0

Btw. 동적 프록시는'HashSet'을 사용하기 때문에'ICollection'이 권장됩니다. –

답변

2

이 작동하며 정렬하고 반환하는 IList<T> :

public class Customer 
{ 
    public int CustomerId { get; set; } 
    public string Name { get; set; } 
    public string City { get; set; } 
} 

public IList<Customer> GetSortedListOfCustomersInCity(string city) 
{ 
    return context.Customers 
     .Where(c => c.City == city) 
     .OrderBy(c => c.Name) 
     .ToList(); 
} 

(나는이 리드 Copsey 그의 대답에 무슨 의미도 생각합니다.) 내가 생각 문제가 있기 때문에, 또 다른 종류이다 이 예제가 작동한다는 것은 너무 분명합니다. 그러나 귀하의 문제가 정확히 어디에서 발생했는지는 알 수 없습니다. 작동하지 않는 코드 조각이 좋습니다.

+0

나는 모든 것을 IList에 다시 넣으려고 시도 했으므로 코드 - 우선 관계를 등록한다. "엔터티 또는 복합 유형 'CodeFirstNamespace '을 LINQ to Entities 쿼리에서 생성 할 수 없습니다. 구체적인 데이터 모델 클래스로 투영하려고하기 때문에 이것이라고 생각합니다.자식 목록을 정렬 한 채로 엔티티를 반환 할 수 있습니까? – jaffa

+0

@ 존 : 나도 몰라. 작동하지 않는 코드를 표시하면 모든 것이 이해하기 쉬울 것입니다. – Slauma

1

그럼 내 질문은 여기서 무엇입니까? 내가하고 싶은 것은 내 응용 프로그램을 통해 리턴 유형을 변경하지 않고 순서대로 클라이언트 (이 경우 서비스)에 데이터를 반환하는 것뿐입니다. 당신이 당신의 쿼리를 만들 때

, 당신은 항상 그들을 평가하고 당신을 위해 IList<T>로 변환됩니다 results.ToList()을 반환 할 수 있습니다.

내부적으로 쿼리를 평가하고 내부 데이터 컨텍스트를 닫을 때 발생할 수있는 문제를 방지하므로 쿼리가 내부적으로 IQueryable<T> 인 경우 많은 경우 이점이 있습니다. 결과. 예를 들어

+0

감사 드려요.하지만이게 저에게 효과가 없다고 확신합니다. – jaffa

관련 문제