2009-12-04 3 views
0

У меня есть LINQ к SQL-запросуLinq к SQL поздней даты

var items = from p in ctx.bam_Zending_AllInstances 
    join q in ctx.bam_Zending_CompletedRelationships 
     on p.ActivityID equals q.ActivityID 
    join r in ctx.bam_Prestatie_AllInstances 
     on q.ReferenceData equals r.ActivityID 
    where q.ReferenceType == "Activity" && 
     p.Zendingnummer == zenderNr 
    orderby r.PrestatieCode 
    select new Data.BAMPrestatieInstance 
     { 
      Aanvaard = r.PrestatieAanvaard, 
      Contactnummer = r.ContactNr, 
      Foutmelding = r.Foutmelding, 
      Identificatie = r.Identificatie, 
      Ontvangen = r.PrestatieZendingOntvangen, 
      Uitvoerdatum = r.Uitvoerdatum, 
      ZendingsNr = p.Zendingnummer, 
      PrestatieCode = r.PrestatieCode 
     }; 

Это возвращает список классов множества «r.PrestatieCode» s. «Uitvoerdatum» - это дата, но мне нужно только иметь последнюю дату для каждого r.PrestatieCode. Как мне с этим заняться? Потому что я знаю, как это сделать в sql, но я не могу найти способ сделать это в linq.

нужно это много атм на самом деле,

любая помощь полезна,

благодаря гроздь!

Gr

+0

Можете ли вы показать мне код T-SQL, который вы использовали бы для этого? –

+0

Я хочу вам помочь, но можете ли вы описать свою задачу немного лучше? Что значит «и мне нужно иметь только последнюю дату для каждого r.PrestatieCode»? – Restuta

ответ

0

Существует, вероятно, наиболее оптимальный путь, но это будет делать то, что вы хотите. С items, как определено выше:

var whatYouWant = items 
         .GroupBy(r => r.PrestatieCode) 
         .Select(
          g => g.Single(
           r => r.Uitvoerdatum == g.Max(s => s.Uitvoerdatum) 
         ) 
         ); 

Что это делает: сначала это группы ваш результат устанавливается Data.BAMPrestatieInstance.PrestatieCode. Затем из каждой группы с тем же Data.BAMPrestatieInstance.PrestatieCode он извлекает максимум Data.BAMPrestatieInstance.Uitvoerdatum, а затем находит уникальный элемент с Data.BAMPrestatieInstance.Uitvoerdatum, равным этой максимальной дате. Если нет уникального элемента с Data.BAMPrestatieInstance.Uitvoerdatum, равным этой максимальной дате, вы можете соответствующим образом изменить (используйте, например, Where вместо Single).

Сообщите мне, если я неправильно понял ваши требования.

0

Если вы знаете, как это сделать в SQL, вы могли бы написать это нравится:

yourDataContext.ExecuteQuery<Data.BAMPrestatieInstance>(
    "<sql query>");