2011-01-22 2 views
0

WCF 데이터 서비스를 쿼리하고 결과 정보를 DataGridView에 바인딩하는 데 사용하려고합니다. 내가 본 모든 샘플 (like this official one)은 항상 단일 엔티티의 모든 열을 선택하는 가장 간단한 시나리오를 가정합니다. 그러나 대부분의 경우에, 나는 관련 기관의 정보를 원하고 나는 엔티티의 모든 필드가 조회되는 원하지 않는 보낸 사람 난 못해, 위의 코드에 WCF 데이터 서비스 및 데이터 바인딩에서 관련 테이블 쿼리

Int32 iIDFilter = 3; 
    TestEntities oTestDB = new TestEntities(new Uri("http://desk01:9877/TestEntities/")); 
    var oConsulta1 = from a in oTestDB.TBLTable1s 
        where a.IDField1 == iIDFilter 
        select new 
        { 
         IDField1 = a.IDField1, 
         IDField2 = a.TBLTable2.IDField1, 
         IDField3 = a.IDField3, 
         IDField4 = a.TBLTable3.IDField1, 
         IDField5 = a.IDRSGroup, 
         IDField6 = a.TBLTable4.IDField1 
        }; 
    DataServiceCollection<TBLTable1> eventos = new DataServiceCollection<TBLTable1>(oConsulta1); 

, 나는 오류가 발생합니다 TBLTable1의 일부 필드와 일부 관련 엔터티의 일부 필드를 선택했기 때문에 DataServiceCollection을 만듭니다. 이 주위에 어떤 방법이 있습니까? WCF Data Services를 사용할 때 관련 필드가없는 엔티티의 모든 필드를 항상 선택해야합니까? 결과에 foreach을 적어도 수행 할 수 있습니까?
Tks

답변

0

제한 사항은 쿼리가 "엔터티"를 반환해야한다는 것입니다. 가장 쉬운 방법은 얻으려고하는 엔티티를 나타내는 클래스의 인스턴스를 반환하는 것입니다. 그런 다음 원하는 속성 만 포함하도록 하위 집합을 지정할 수 있습니다. 또한 결과를 "평평하게"할 수 없기 때문에 관련 엔터티의 일부 속성 만 원하면 해당 엔터티를 투영해야하지만 일부 속성 만 투영해야합니다.

http://services.odata.org/OData/OData.svc/Products()?$expand=Category&$select=ID,Name,Category/ID,Category/Name 
:

DemoService ctx = new DemoService(new Uri("http://services.odata.org/OData/OData.svc/")); 

var query = from p in ctx.Products 
      select new Product() 
      { 
       ID = p.ID, 
       Name = p.Name, 
       Category = new Category() 
       { 
        ID = p.Category.ID, 
        Name = p.Category.Name 
       } 
      }; 

DataServiceCollection<Product> products = new DataServiceCollection<Product>(query); 

foreach (var p in products) 
{ 
    Console.WriteLine(p.Category.Name); 
} 

이이 URL을 실행한다 : 예를 들어 (나는 데모 OData.org 서비스에 대한 참조를 추가)

관련 문제