Filtro com Linq ou Lambda utilizando Join e Group By

11/05/2017

0

C#

Boa Tarde

Em uma tabela onde sempre é inserido novos registros podem ocorrer de ter a mesma Date e o mesmo RateCode, porém eu quero pegar uma lista dessa tabela mas para cada grupo Date, RateCode gostaria que me retornasse o último registro inserido, garantindo que vai ser sempre a última linha inserida, como estou utilizando Entity Framework não posso rodar a query para me retornar o resultado, acredito ser melhor usar lambda ou LINQ para filtrar os dados, porém, não tenho muita experiência em usos complexos e até o momento não estou conseguindo implementar a lógica, em SQL filtraria dessa forma do jeito mais simples.
select a.* 
  from DailyRates a
  join (select Max(Id) as Id, Date, RateCode
          from DailyRates
         where RoomTypeId = 79
         group by Date, RateCode) b on a.id = b.id
Lucas Ramos

Lucas Ramos

Responder

Post mais votado

11/05/2017

Bom consegui resolver com LINQ, primeira lista capturo do banco com os filtros e linhas duplicadas, na segunda filtro somente as linhas mais recentes com os registros mais atuais inseridos.
List<DailyRate> dailyRates = oDailyDao.All().Where(x => x.RoomTypeId == dailyRate.RoomTypeId && x.RoomType.Company.SeriesNumber == sSeriesNumber).ToList();

List<DailyRate> dailyRatesFiltro = (from a in dailyRates
                                    join b in (from x in dailyRates
                                              group x by new { x.Date, x.RateCode } into z
                                              select new { Id = z.Max(a => a.Id) }) on  a.Id equals b.Id
                                    select a).ToList();

Lucas Ramos

Lucas Ramos
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar