2011-08-24 5 views
0

저는 어떤 이유로 든 정말로 갇혀 있습니다. linq을 통해 XML 묶음을 가지고 DTO 객체에 맞도록 조정했는데 제대로 작동하지만 몇 분 동안 전체 가용성을 가진 룸 유형을 반환하는 추가 필터가 필요합니다.LINQ의 하위 목록 수를 기반으로 개체를 제한합니다.

DTO 작동을 설정하는 원래의 쿼리가 작동하지만 전체 기간 동안 요금을 사용할 수있는 방을 반환하는 항목을 추가하려고합니다. 따라서 10 일을 예약하고 싶다고 말하면 10 일간 이용하실 수있는 객실 유형. 그것은 모든 가능한 놀라운 것이 쿼리에 제한이하는 경우

var items = (
    from rt in data.Descendants("RoomType") 
    select new RoomType 
    { 
     name = rt.Descendants("RoomDescription").Descendants("Text").SingleOrDefault().Value, 
     rooms = (
      from r in rt.Descendants("Room") 
      select new Room 
      { 
       Name = r.Attribute("id").Value, 
       rates = (
        from rr in r.Descendants("RoomRate") 
        where DateTime.Parse(rr.Attribute("EffectiveDate").Value) >= startDate 
        where DateTime.Parse(rr.Attribute("EffectiveDate").Value) <= endDate 
        select new RoomRate 
        { 
         EffectiveDate = DateTime.Parse(rr.Attribute("EffectiveDate").Value) 
        }) 
      }) 
    }); 

,하지만 난 그것을 수행하는 방법을 참조 couldnt는 : 내 원래의 쿼리는 다음과 같다.

내가이 하나의 뒤에서 다른 쿼리를 만들려고 할 때 반환 할 RoomType 개체에서 Rooms.RoomRates의 수를 쿼리 할 수있는 방법을 알지 못했습니다. 내가

var result = items.Where(i => i.rooms.Where(r => r.rates.Count() == 10)); 

을 시도하지만 내게는 bool로하는 IEnumerable을 변환하지 못할 예외를 제공, .ANY()는 컴파일하지만 (아마 예상대로) 모두를 반환합니다.

아무도 내가 여기서 잘못하고있는 것을 알고 있습니까? 방 1 (일의 availble 10) - -

룸 2 (10 가능한 일) 싱글 :

편집 : **이는 순간에서

객실 타입의 데이터를 당기는 방법입니다 객실 타입 : 트윈 - 룸 3 (10 가능한 일) -

룸 4 (4 가능한 일) 내가이 일의 기준을 충족 나던로 복귀 룸 4를 제외하면됩니다하려고

그래서 난 돌아 가야 무엇 :

객실 타입 : 싱글 - 룸 1 (일의 availble 10) - 방 2 (일 사용 가능한 10) 객실 타입 : 트윈 - 룸 3 (일 사용 가능 10) 만 Room의를 원하는 경우에, 당신은 단지 컬렉션을 평평하게 할 수 그것을 좀 더 명확

감사

+0

을 당신은 그들의'Room'의 일부가 새로운'RoomType's를 만들 의미 에스? – SLaks

+0

안녕 SLAKs, 나는 모든 roomtypes를 반환하고 원하는 availabililty (즉, 10 일 사용할 수있다)가있는 방을 반환하고 싶습니다 – Modika

답변

1

하게

희망, 다음을 필터링 :

당신이 RoomTypes을 원하는 경우
IEnumerable<Room> rooms = items.SelectMany(i => i.Rooms) 
           .Where(r => r.rates.Count() == 10) 

, 필터링 된 Rooms 새로운 RoomType 객체를 생성해야합니다 :

var types = items.Select(i => 
    new RoomType { 
     name = i.name, 
     rooms = i.rooms.Where(r => r.rates.Count() == 10) 
    } 
); 
+0

안녕하세요 SLAKs 덕분에, 내가 객실 유형뿐만 아니라 객실을 반환하고 싶은대로 질문을 업데이 트했습니다 그게 가능하지 않다면 나는 다르게 일할 것이지만 그것이 이상적으로하고 싶은 것입니다. – Modika

+0

@Modika : 내 편집을 참조하십시오. – SLaks

+0

@SLacks, 고마워, 그게 치료를 해결 – Modika

관련 문제