2009-06-10 5 views
3

단일 테이블이 있고 단일 테이블을 기반으로 중첩 된 개체를 빌드해야합니다.단일 테이블에서 중첩 된 개체를 작성하는 방법 Linq 쿼리

데이터 :

PointA PointB 월 시간 가격 1 2 11 11시 10.99 1 2 12 11시 9.99

객체는

포인트 {PointA, PointB, 세부 사항} 있습니다 세부 사항 {Month, ExtraDetails} ExtraDetails {시간, 가격}

루프 및 if 문이로드되는 것을 피하기 위해 linq를 사용할 수 있어야합니다. 이것을하기 위해. 하지만 그 이상의 내 linq 경험.

편집 :이 좋은 것 aswell

어떤 도움을 그룹화해야합니다.

덕분에 당신은 당신의 클래스는 당신이 언급 한 객체에 대해 정의하고, 당신이 포인트의 목록을 반환하는 LINQ 쿼리를 가질 수 한 줄에서 개체를 만들 때에 프로퍼티 할 수 있도록 생성자 또는 속성을 가지고있어 가정

답변

3

그냥 밖으로 시도하는 솔루션을 적절한 검증 쿼리를 작성할 수 없습니다

var nestedObjects = from row in data 
    select new {row.PointA, row.PointB, Details = new { 
     row.Month, ExtraDetails = new { 
      row.Time, row.Price 
     } 
    }}; 

목 데이터가 이미 데이터에 저장되어 있다고 가정합니다. 당신이 함께 그룹에 포인트를 원하는 경우


그룹에 의해

, 당신은 '그룹에 의해'필요

var nestedObjects = from row in data 
    group row by new { row.PointA, row.PointB } into Points 
    select new { 
     Points = Points.Key, 
     Details = from details in Points 
      select new { row.Month, ExtraDetails = new { 
       row.Time, row.Price 
      }} 
    }; 

조금 더 복잡 - 물론 당신이 그룹에 할 수 있습니다 또한 월별로, 포인트 비트와 동일한 패턴을 따라야합니다. 그룹에 의해 그렇게하지는 않지만 최소한 구조를 생성하기 때문에 테이블을 만들지는 않습니다.

0

.

이 사장님 뭔가 갈 것입니다 경우

나는 코드에 대한 죄송

, 내가 그렇게 .NET 3.5 컴퓨터에서 아닙니다 포인트의 IEnumerable을 될 것입니다 최종 고해상도에서

var res = 
    from item in table.AsEnumerable() 
    select new Points(){PointA = item["PointA"]; 
          PointB = item["PointB"]; 
          Details = from item2 in table.AsEnumberable() 
            where item["PointA"] = item2["PointA"] and item["PointB"] = item2["PointB"] 
            select new Details(){ 
                  month=item2["month"], 
                  extraDetails = from item3 in table.AsEnumerable()... 
                 } 
         }; 

을 나는

+0

그러면 세부 객체가 점 객체 내부에 들어가게됩니까? 이 그룹은 포인트를 함께 묶어서 반복이 없습니까? –

+0

오케이, 이제 정말 당신의 질문을 이해했습니다. Unfourtunately 중첩 된 linq 쿼리 requrire 않을 soltion 모르겠다. 내 코드를 그런 식으로 업데이트 할 것이다. – AlexDrenea