2009-12-04 7 views
0

J'ai LINQ to SQL requêteLINQ to SQL date

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 
     }; 

Ceci retourne une liste des classes de multiactivités "r.PrestatieCode". "Uitvoerdatum" est une date cependant, et je dois seulement avoir la dernière date pour chaque r.PrestatieCode. Comment dois-je aller avec cela? Parce que je sais comment faire ça en sql, mais je n'arrive pas à trouver le moyen de le faire en linq.

ont besoin de ce fait beaucoup atm,

toute aide est utile,

remercie un groupe!

Gr

+0

Pouvez-vous me montrer le code T-SQL que vous utiliseriez pour cela? –

+0

Je veux vous aider, mais pouvez-vous décrire votre tâche un peu mieux? Qu'est-ce que cela signifie "et je dois seulement avoir la dernière date pour chaque r.PrestatieCode"? – Restuta

Répondre

0

Il y a probablement une façon plus optimale, mais cela va faire ce que vous voulez. Avec items défini comme ci-dessus:

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

Ce que cela fait: D'abord, il groupe Vos résultats par Data.BAMPrestatieInstance.PrestatieCode. Puis, à partir de chaque groupe avec le même Data.BAMPrestatieInstance.PrestatieCode, il extrait le maximum Data.BAMPrestatieInstance.Uitvoerdatum, puis trouve l'élément unique avec Data.BAMPrestatieInstance.Uitvoerdatum égal à cette date maximale. S'il n'y a pas un élément unique avec Data.BAMPrestatieInstance.Uitvoerdatum égal à cette date maximale, vous pouvez modifier en conséquence (utilisez Where au lieu de Single, par exemple). Faites-moi savoir si j'ai mal compris vos exigences.

0

Si vous savez comment le faire dans SQL, vous pouvez l'écrire comme:

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