2011-08-24 72 views
0

我很好,真的因爲某種原因而陷入困境。我有一堆XML通過linq我已經調整,以適應我的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) 
        }) 
      }) 
    }); 

,如果它是在所有可能在此查詢這將是驚人的限制,但我不能看到如何做到這一點。

當我試圖從這一個的背面創建另一個查詢我不知道我怎麼能從RoomType對象查詢Rooms.RoomRates的計數來返回。我試圖

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

但是這給了我一個例外,它不能轉換的IEnumerable爲bool,。任何()編譯,但返回的一切(如可能預期)。

有人知道我在這裏做錯了嗎?

編輯:**這是它是如何把數據從此刻

房間類型:單 - 1間(天availble的10) - 2間(可用天數10)

房型:雙牀 - 3間(可用天數10) - 4間(天可用4)

什麼,我試圖做的是從返回排除4間爲它不符合標準的天

所以我應該得到的回覆是:

房間類型:單 - 1間(天availble的10) - 2間(天可用10) 客房類型:雙 - 3間(天可用10)

希望這使得它更清楚一點

感謝

+0

你的意思是你要創建新的'RoomType's,只有具有一定的'Room'的S' – SLaks

+0

嗨SLaks,我想返回所有房型,然後只返回房間有所需的可用性(即有10天可用) – Modika

回答

1

如果你只是想Room S,你可以扁平化的集合,然後將其過濾:

IEnumerable<Room> rooms = items.SelectMany(i => i.Rooms) 
           .Where(r => r.rates.Count() == 10) 

如果你想RoomTypes,你需要用過濾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