在LINQ中需要SELECT WHERE COUNT = INT

时间:2009-12-22 07:43:41

标签: c# sql linq-to-sql

我有下表记录了酒店中的特定房间(由三个字符代码[dlx,sup,jac等等]指定)在特定DATETIME上售罄的情况。

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的列表,其中COUNT个已售罄的房间数量。

我需要将此列表仅过滤到DATETIME = 8的COUNT,因为那时酒店已售罄。

这应该很简单,但我无法弄清楚如何在LINQ

中做到这一点

2 个答案:

答案 0 :(得分:4)

我认为您需要在查询中添加以下内容:where s.Count()==8

答案 1 :(得分: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;