2009-12-22 70 views
0

我有下表,它記錄了某個酒店中的特定房間(由三個字符代碼[dlx,sup,jac等..]指定)何時在特定DATETIME需要在LINQ中選擇哪裏COUNT = INT

CREATE TABLE [dbo].[RoomSoldOut](
    [SoldOutID] [int] IDENTITY(1,1) NOT NULL, 
    [RoomType] [nchar](3) NOT NULL, 
    [SoldOutDate] [datetime] NOT NULL, 
CONSTRAINT [PK_RoomSoldOut5] PRIMARY KEY CLUSTERED 

我需要找出特定日期何時在整個酒店售罄。有8種房間類型,如果所有8種房間都售罄,那麼酒店在那天晚上被預訂爲固定。

LINQ聲明可以計算給定夜晚售賣的房型的工作原理。

var solds = from r in RoomSoldOuts 
    group r by r.SoldOutDate into s 
    select new 
    { 
     Date = s.Key, 
     RoomTypeSoldOut = s.Count() 
    }; 

從這個LINQ語句我可以得到所有的售罄DATETIME的名單與客房,都賣完了的數的計數。

我需要將此列表過濾爲只有那些DATETIME的地方COUNT = 8,因爲那時酒店在當天就售罄了。

這應該是簡單,但我無法弄清楚如何做到這一點的LINQ

回答

4

我認爲你需要添加下面的查詢:where s.Count()==8

+0

謝謝你soooooo很多! – 2009-12-22 07:51:01

4

您也可以嘗試

var solds = (from r in RoomSoldOuts 
      group r by r.SoldOutDate into s 
      select new 
      { 
       Date = s.Key, 
       RoomTypeSoldOut = s.Count() 
      }).Where(x => x.RoomTypeSoldOut == 8); 

然後,您可以也縮短了它只能選擇日期

var solds = from r in RoomSoldOuts 
      group r by r.SoldOutDate into s 
      where s.Count() == 8 
      select s.Key; 
+0

我喜歡擴展方法,但是從@Konamiman中添加簡單的'where s.Count()== 8'會有什麼好處嗎?似乎比需要更復雜? – 2009-12-22 08:02:27

+1

這將在LINQ-to-SQL查詢周圍進行LINQ到對象的查詢,因此它將從所有記錄創建對象並在之後進行過濾,而不是在SQL查詢中使用HAVING。 – Guffa 2009-12-22 08:06:50

+0

我假設你是說過濾SQL SERVER方面更好,所以我們不會將不需要的數據傳輸回客戶端。我同意! – 2009-12-22 08:11:55