2013-03-12 1 views
2

를 입력하기 위해 나는이 일 MVVM과 PRISM에 따라 엔티티 프레임 워크 5. I 개발 WPF 응용 프로그램을 배우고있다. 속성 변경 알림을 받으려면 내 데이터 보관을 위해 ObservableCollection을 사용하고 있습니다. 내가 엔티티 투사에 LINQ를 사용할 때가장 좋은 방법이 강하게 ObservableCollection에

나는 문제가 있고 나는 그것을위한 가장 좋은 방법이 무엇인지 모르겠습니다. 아시다시피 당신이 엔티티에 LINQ를 통해 투사을 실행할 때

, 당신은 아무도 방법의 범위를 알 수없는 익명의 유형을 얻을. 이 쿼리를 강력하게 입력하는 방법을 모색했습니다.

나는이 문제에 대한 몇 가지 논의를 볼 수 있지만 가장 좋은 방법이 무엇인지 찾을 수 couldn`t. 번호 3은 단순한 하나입니다

  • http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/c6b8375a-2684-4020-bbcc-24433baf997b
  • 쿼리 정의를 사용하여

  • QueryView
  • 을 사용

    1. 내가 필요로하지만 내가 아는 정확히처럼 보이는 : 나는 3 개 가지 솔루션을 볼

      리플렉션은 "고비용"작업이므로이 문제에 대한 최선의 접근 방법이 무엇인지 궁금한 점이 있습니까? 다른 솔루션?

      내가 VB를 사용하십시오 :

    답변

    0

    익명 형식이 아닌 명명 된 형식으로 투영해서는 안됩니다. 간단한 클래스 OrderDto를 사용

    var query = from c in Customers 
          join o in Orders on c.CustomerID equals o.CustomerID 
          select new OrderDto { 
                customer_name = c.CompanyName, 
                order_date = o.OrderDate, 
                order_Id = o.OrderID 
               }; 
    

    . 따라서 귀하의 선택 사항이 아닙니다.

    사이드 참고 :

    var query = from o in Orders 
          select new OrderDto { 
                customer_name = o.Customer.CompanyName, 
                order_date = o.OrderDate, 
                order_Id = o.OrderID 
               }; 
    

    및 EF 가입하는 방법을 알아낼 것이다 : 당신은 아마 탐색 속성을 사용할 수 있습니다.

    +0

    안녕하세요, 답변 해 주셔서 감사합니다. 나는 4-5 시간 안에 그것을 시도하고보고 할 것이다. 나는이 방법을 솔루션 3과 어떻게 비교할 것인가? "반사 솔루션"보다 나은가요? – Ofir

    +1

    IMO, 그렇습니다. 리플렉션이 포함 된 솔루션은 느리고 불필요하게 복잡합니다. 내 생각에 반성은 절대적으로 대안이 없다면 사용되어야합니다. –

    +0

    감사합니다. 정확히 내가 찾은 바입니다. – Ofir

    0

    이 내가 무엇을 사용

    Dim ObjectQuery As IQueryable(Of YourObject) = CType((From c In YourContext.objects Select c), IQueryable(Of YourObject)) 
    Return New ObservableCollection(Of YourObject)(ObjectQuery) 
    

    에서는 CType없이 C#에서 클라이언트 테이블을 기반으로 위의 간단한 버전. VB에서 C# 변환기를 사용하여 조정해야 할 수도 있습니다.

    IQueryable<client> ClientQuery = from c in ftcContext.clients select c; 
    return new ObservableCollection<client>(ClientQuery); 
    
    +0

    난'C#을 개발자. "YourObject"란 무엇입니까? 나는이 투영 특정 객체가 돈't,이 투영 – Ofir

    +0

    yourobject 엔티티 프레임 워크 엔티티의 이름입니다 내 다른 기업의 컬럼의 혼합을 반환합니다. 데이터베이스에 클라이언트라고 불리는 테이블이 있다면 다음과 같이 보일 것입니다 : Dim ClientQuery IQueryable (Of 클라이언트) = CType (c에서 ftcContext.clients 선택 c), IQueryable (Of 클라이언트) Return New ObservableCollection (Of Client) (ClientQuery) –

    +0

    @OFir 'Of X'는 C#의 일반 구문 인 ''에 대한 VB의 구문입니다. 어떤 종류의 강한 수업이 필요합니다. – StuartLC

    관련 문제