2016-07-14 3 views
-1

나는 EF를 사용하여 데이터베이스에서 일부 조회 데이터를 읽고 싶은, 그래서 나는 다음을 수행하십시오LINQ를 사용하여 익명 형식을 쿼리 할 수 ​​있습니까?

public object LocationLookUps() 
    { 
     var locationTypes = ClientContext.LocationTypes; 
     var serviceCategories = ClientContext.ServiceCategories; 
     var serviceTypes = ClientContext.ServiceTypes; 
     var timeZones = ClientContext.TimeZones; 

     return new {locationTypes, serviceCategories, serviceTypes, timeZones}; 
    } 

나중에 내 소비하는 코드 내에서, 나는 주어진 locationType에 있는지 여부를 확인하기 위해 이러한 유형의 각을 조회 할 , timeZone 등은 유효한 값입니다. 나는 List<LocationType>을 반환했다면, 그때로 조회 할 수 있습니다 : 당신은 익명의 유형과 같은

var locationType = list.SingleOrDefault(t => t.LocationTypeCode = "B"); 

할 수 있습니까?

+1

위의 질문에서 볼 수 있듯이 그렇게 할 수는 있지만 권장하지는 않습니다. 방금 클래스를 만들었거나 터플 (읽기 쉽지 않음)을 사용합니다. –

+0

새 익명 형식 인스턴스를 메서드에서 반환하는 것은 일반적으로 유용하지 않습니다. 한 가지 예외는 호출자가 완전히 동일한 익명 형식을 사용하는 제네릭 메서드 (속성이 정확히 동일하면 컴파일러에서 같은 형식으로 만듭니다.)이지만 매우 특이한 시나리오입니다. 메소드에서 객체의 새 인스턴스를 반환해야하는 경우 일반적으로 새로운 명명 된 유형을 선언해야합니다. 왜 여기서 그걸하고 싶지 않아? 나에게 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 같은 냄새가납니다. –

답변

0

메서드에서 익명 형식을 반환 할 방법이없고 개체를 반환하면 형식 정보에 대한 디자인 타임 지식이 삭제됩니다. 당신이 묻는 것을 할 방법이 없습니다.

그렇다고해서 원하는 것을 할 수있는 방법이 없다는 의미는 아닙니다. 일부 옵션 :

  • 반환 별도로 각 조회,
  • 네 별도의 방법으로는
  • Repository Pattern를 사용하고 방법을 노출 네 조회 에 대한 입력 특성을 포함하는 AllLookups 클래스를 생성하고 메서드에서 반환 각각의 고유 한 조회 관련 검색어에 대해 각각
0

아니요. C#은 강력한 형식입니다. 컴파일시 컴파일러는 모든 익명 유형을 찾아서 실제 유형으로 변환합니다. 그리고 모든 작업은 익명 형식 변환을 통해이 생성 된 실제 형식으로 작업합니다.

코드에 실제 유형의 미래 이름을 알지 못합니다. 그래서 당신은 단지

var temp = new {something}; 

를 사용하고 다른 장소

당신은 개체를 반환에 및 localY 또는 반사 (dynamic 키워드)에 의해 온도를 사용할 수 있습니다. 그래서 다른 코드는 그것을 Object처럼 해석 할 것입니다. 네가 이름을 몰라서 너는 캐스팅을 할 수 없다. 4 개의 필드를 포함하는 ViewModel 클래스를 만들어야한다고 가정합니다.