none
Consulta que Retorne somente o que não esta entre o período RRS feed

  • Pergunta

  • Pessoal, Tenho 2 Tabela Apto e Reservas. Gostaria de Carregar no combo box somente os apartamento que não estejam reservados ou Ocupados no Período Informado.

    ja fiz alguns testes em êxito. desde de ja muito obrigado pela ajuda.

    ' Dim Resultado = From p In DBContexto.Apartamentos.ToList Order By p.Numero Select p.apartamentoId, p.Numero

                Dim Resultado = (From p In DBContexto.Apartamentos Join r In DBContexto.Reservas On p.apartamentoId Equals r.ApartamentoID Where Not r.DataEntrada > frmReserva.dtpEntrada.Text _

                 And r.DataSaida < frmReserva.dtpSaida.Text Order By p.Numero Select p.apartamentoId, p.Numero)

                

                frmReserva.cmbApto.DataSource = Resultado.ToList

                frmReserva.cmbApto.DisplayMember = "Numero"

                frmReserva.cmbApto.ValueMember = "apartamentoId"


    segunda-feira, 2 de dezembro de 2013 18:48

Respostas

  • Amigo:

    Tive que recorrer a pesquisas com linq visto que a data pode estar entre as que tem reserva

    Código Exemplo:

    Dim DataE As Date = Date.Parse("28/11/2013")
    Dim DataS As Date = Date.Parse("28/11/2013")
    Dim Dta As Date
    Dim AptoIds As New List(Of Integer)
    Dim resultados = Db.Reserva.OrderBy(Function(o) o.DataEntrada).Select(Function(s) New With {s.ApartamentoID, s.DataEntrada, s.DataSaida}).ToList()
    For Each resultado In resultados
    	Dta = DataE
    	Do While (Dta <= DataS)
    		If (Dta = resultado.DataEntrada OrElse Dta = resultado.DataSaida) Then
    			If (AptoIds.Where(Function(n) n = resultado.ApartamentoID).Any() = False) Then
    				AptoIds.Add(resultado.ApartamentoID)
    				Dta = DataS.AddDays(1)
    			End If
    		End If
    		Dta = Dta.AddDays(1)
    	Loop
    Next
    Dim Apartamentos = Db.Apartamento.Where(Function(x) Not AptoIds.Contains(x.apartamentoId)).OrderBy(Function(f) f.apartamentoId).ToList()

    A ultima variavel Apartamentos tem os dados para geração do DropDown!!!

    Faça os testes e me fala se deu certo ... preste atenção isso é um exemplo !!!


    Fulvio Cezar Canducci Dias


    sexta-feira, 6 de dezembro de 2013 17:15

Todas as Respostas

  • Ajudaria se você colocasse a SQL de criação das duas tabelas e alguns dados!?

    Manda isso por favor! uma vez eu já fiz isso e deu um trabalham do caramba!


    Fulvio Cezar Canducci Dias

    segunda-feira, 2 de dezembro de 2013 19:26
  • Public Class Apartamento
        Public Property apartamentoId As Integre
        Public Property Numero As Integer
        Public Property Ramal As Integer
        Public Property TipoApartamentoId As Integer
        Public Overridable Property TipoApartamento() As TipoApartamento
    End Class
    
    Public Class Reserva
        Public Property ReservaId As Integer
        Public Property DataEntrada As Date
        Public Property DataSaida As Date
        Public Property Status As String
        Public Property ValorReserva As Decimal
        Public Property DataReserva As Date
        Public Property NumeroHospedes As Integer
        Public Property observacao As String
    
    
        Public Property ApartamentoID As Integer
        Public Overridable Property Apartamentos() As Apartamento
    
        Public Property BoxId As Integer
        Public Overridable Property Boxes() As Box
    
        Public Property ClienteId As Integer
        Public Overridable Property clientes() As Cliente
    

    terça-feira, 3 de dezembro de 2013 13:22
  • SQL de Create Table das tabelas!? com elas gero o entity e ai te falo a solução!

    Fulvio Cezar Canducci Dias

    terça-feira, 3 de dezembro de 2013 13:34
  • To reinstalando tudo aqui. deu erro do SSDT e não teve jeito. Logo posto ai. Valeu
    quinta-feira, 5 de dezembro de 2013 14:25
  • CREATE TABLE [dbo].[Apartamentoes] (
        [apartamentoId] int IDENTITY(1,1) NOT NULL,
        [Numero] int  NOT NULL,
        [Ramal] int  NOT NULL,
        [TipoApartamentoId] int  NOT NULL
    );
    GO
    
    -- Creating table 'Boxes'
    CREATE TABLE [dbo].[Boxes] (
        [BoxId] int IDENTITY(1,1) NOT NULL,
        [NumeroBox] int  NOT NULL
    );
    GO
    
    -- Creating table 'Reservas'
    CREATE TABLE [dbo].[Reservas] (
        [ReservaId] int IDENTITY(1,1) NOT NULL,
        [DataEntrada] datetime  NOT NULL,
        [DataSaida] datetime  NOT NULL,
        [Status] nvarchar(max)  NULL,
        [ValorReserva] decimal(18,2)  NOT NULL,
        [DataReserva] datetime  NOT NULL,
        [NumeroHospedes] int  NOT NULL,
        [observacao] nvarchar(max)  NULL,
        [ApartamentoID] int  NOT NULL,
        [BoxId] int  NOT NULL,
        [ClienteId] int  NOT NULL,
        [ModalidadeHospedagemID] int  NOT NULL
    );
    GO
    
    -- --------------------------------------------------
    -- Creating all PRIMARY KEY constraints
    -- --------------------------------------------------
    
    -- Creating primary key on [apartamentoId] in table 'Apartamentoes'
    ALTER TABLE [dbo].[Apartamentoes]
    ADD CONSTRAINT [PK_Apartamentoes]
        PRIMARY KEY CLUSTERED ([apartamentoId] ASC);
    GO
    
    -- Creating primary key on [BoxId] in table 'Boxes'
    ALTER TABLE [dbo].[Boxes]
    ADD CONSTRAINT [PK_Boxes]
        PRIMARY KEY CLUSTERED ([BoxId] ASC);
    GO
    
    -- Creating primary key on [ReservaId] in table 'Reservas'
    ALTER TABLE [dbo].[Reservas]
    ADD CONSTRAINT [PK_Reservas]
        PRIMARY KEY CLUSTERED ([ReservaId] ASC);
    GO
    
    -- --------------------------------------------------
    -- Creating all FOREIGN KEY constraints
    -- --------------------------------------------------
    
    -- Creating foreign key on [ApartamentoID] in table 'Reservas'
    ALTER TABLE [dbo].[Reservas]
    ADD CONSTRAINT [FK_dbo_Reservas_dbo_Apartamentoes_ApartamentoID]
        FOREIGN KEY ([ApartamentoID])
        REFERENCES [dbo].[Apartamentoes]
            ([apartamentoId])
        ON DELETE CASCADE ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_dbo_Reservas_dbo_Apartamentoes_ApartamentoID'
    CREATE INDEX [IX_FK_dbo_Reservas_dbo_Apartamentoes_ApartamentoID]
    ON [dbo].[Reservas]
        ([ApartamentoID]);
    GO
    
    -- Creating foreign key on [BoxId] in table 'Reservas'
    ALTER TABLE [dbo].[Reservas]
    ADD CONSTRAINT [FK_dbo_Reservas_dbo_Boxes_BoxId]
        FOREIGN KEY ([BoxId])
        REFERENCES [dbo].[Boxes]
            ([BoxId])
        ON DELETE CASCADE ON UPDATE NO ACTION;
    
    -- Creating non-clustered index for FOREIGN KEY 'FK_dbo_Reservas_dbo_Boxes_BoxId'
    CREATE INDEX [IX_FK_dbo_Reservas_dbo_Boxes_BoxId]
    ON [dbo].[Reservas]
        ([BoxId]);
    GO
    

    sexta-feira, 6 de dezembro de 2013 13:02
  • SET IDENTITY_INSERT [dbo].[Reservas] ON
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (1, N'2013-11-28 00:00:00', N'2013-11-28 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-11-28 00:00:00', 3, N'Teste', 3, 1, 3, 1)
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (3, N'2013-11-30 00:00:00', N'2013-12-06 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-11-28 00:00:00', 2, N'teste m', 1, 3, 3, 1)
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (4, N'2013-12-06 00:00:00', N'2013-12-07 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-11-28 00:00:00', 1, N'g', 2, 2, 3, 1)
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (5, N'2013-11-29 00:00:00', N'2013-11-29 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-11-28 00:00:00', 1, N'Aguarando Confirmação', 3, 5, 3, 1)
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (6, N'2013-11-28 00:00:00', N'2013-11-30 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-11-28 00:00:00', 2, N'Aguarando Confirmação', 1, 5, 3, 1)
    INSERT INTO [dbo].[Reservas] ([ReservaId], [DataEntrada], [DataSaida], [Status], [ValorReserva], [DataReserva], [NumeroHospedes], [observacao], [ApartamentoID], [BoxId], [ClienteId], [ModalidadeHospedagemID]) VALUES (7, N'2013-12-02 00:00:00', N'2013-12-02 00:00:00', N'Aguarando Confirmação', CAST(100.00 AS Decimal(18, 2)), N'2013-12-02 00:00:00', 1, N'', 1, 2, 3, 1)
    SET IDENTITY_INSERT [dbo].[Reservas] OFF

    sexta-feira, 6 de dezembro de 2013 13:04
  • Amigo:

    Tive que recorrer a pesquisas com linq visto que a data pode estar entre as que tem reserva

    Código Exemplo:

    Dim DataE As Date = Date.Parse("28/11/2013")
    Dim DataS As Date = Date.Parse("28/11/2013")
    Dim Dta As Date
    Dim AptoIds As New List(Of Integer)
    Dim resultados = Db.Reserva.OrderBy(Function(o) o.DataEntrada).Select(Function(s) New With {s.ApartamentoID, s.DataEntrada, s.DataSaida}).ToList()
    For Each resultado In resultados
    	Dta = DataE
    	Do While (Dta <= DataS)
    		If (Dta = resultado.DataEntrada OrElse Dta = resultado.DataSaida) Then
    			If (AptoIds.Where(Function(n) n = resultado.ApartamentoID).Any() = False) Then
    				AptoIds.Add(resultado.ApartamentoID)
    				Dta = DataS.AddDays(1)
    			End If
    		End If
    		Dta = Dta.AddDays(1)
    	Loop
    Next
    Dim Apartamentos = Db.Apartamento.Where(Function(x) Not AptoIds.Contains(x.apartamentoId)).OrderBy(Function(f) f.apartamentoId).ToList()

    A ultima variavel Apartamentos tem os dados para geração do DropDown!!!

    Faça os testes e me fala se deu certo ... preste atenção isso é um exemplo !!!


    Fulvio Cezar Canducci Dias


    sexta-feira, 6 de dezembro de 2013 17:15
  • Muito Obrigado!!! Valeu pela Aula.
    segunda-feira, 9 de dezembro de 2013 14:18
  • Muito Obrigado!!! Valeu pela Aula.
    Por nada!

    Fulvio Cezar Canducci Dias

    segunda-feira, 9 de dezembro de 2013 18:51
  • Fulvio,

    Quero só uma Luz e não a resposta... caso eu não consiga sozinho volto a pedir ajuda. 

    2 situação desse mesmo Combobox: Ao clicar na Reserva efetuada para fazer uma modificação eu recarrego o Cmbbox novamente, Porem Como esta reservado o quarto, o mesmo não carrega na combo.  Existe uma forma de incluir uma excessão na Consulta? ou Teria que puxar da Gridview o Id e adicionar na lista formada pela consulta?

    quarta-feira, 11 de dezembro de 2013 13:43
  • Desculpa Gusta24131, eu não sabia que sua dúvida era só um "Luz", foi mau da minha parte!

    Eu acredito que a "Luz", para a duvida do Combobox é via SQL !!!


    Fulvio Cezar Canducci Dias

    quarta-feira, 11 de dezembro de 2013 13:49
  • Eu que peço desculpa por me expressar mau! a Luz é nessa segunda duvida!! lá eu ja queria exatamente o que vc fez! muito Obrigado! 

    quarta-feira, 11 de dezembro de 2013 14:01
  • Eu que peço desculpa por me expressar mau! a Luz é nessa segunda duvida!! lá eu ja queria exatamente o que vc fez! muito Obrigado! 

    Não há problemas!

    Fulvio Cezar Canducci Dias

    quarta-feira, 11 de dezembro de 2013 14:03