Нужно выбрать, где COUNT = INT в LINQ - PullRequest
0 голосов
/ 22 декабря 2009

У меня есть следующая таблица, в которой записывается, когда конкретный номер в отеле (обозначенный трехзначным кодом [dlx, sup, jac и т.

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

Ответы [ 2 ]

4 голосов
/ 22 декабря 2009

Вы также можете попробовать

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;
4 голосов
/ 22 декабря 2009

Я думаю, что вам нужно добавить в запрос следующее: where s.Count()==8

...