2015-08-12 3 views
-1

У меня есть этот SQL-запрос:Linq получить максимум() Группировка

declare @p_Date datetime 
set @p_Date = '01/01/2015' 

select * 
from inv_hist 
where Secuencia in (
    select max(Secuencia) 
     from inv_hist 
     where DatFechaDocumento <= @p_Date 
      group by Bodega,NumIdConcepto 
    ) 

Как я могу написать этот запрос в LINQ?

РЕДАКТИРОВАТЬ: Я был весь день с этим днем. Я не специалист по linq, и другие подобные вопросы не решают мою проблему.

ответ

1

Попробуйте это:

var query = from x in invHistory 
        join y in 
          (
           from z in invHistory 
           where z.PDate == "01/01/2015" 
           group z by new { z.Bodega, z.NumIDConcepto } into g 
           select new 
             { 
              NewSecuencia = g.Max(s => s.Secuencia) 
             } 
          ) 
          on x.Secuencia equals y.NewSecuencia 
        select x; 

Если вы хотите неявного стиля это то, как вы это делаете:

var query2 = from x in invHistory 
       from y in 
         (
          from z in invHistory 
          where z.PDate == "01/01/2015" 
          group z by new { z.Bodega, z.NumIDConcepto } into g 
          select new 
          { 
           NewSecuencia = g.Max(s => s.Secuencia) 
          } 
         ) 
       where 
        x.Secuencia == y.NewSecuencia 
       select x; 

Пожалуйста, обратите внимание, что неявный стиль соединения синтаксиса (ANSI-89) не является стандартом и устарел от SQL Server 2005.

+0

Работает отлично, можно выразить этот запрос с помощью неявного синтаксиса? Вот почему мне нужны другие динамические фильтры. –