2011-02-17 5 views
13

Je souhaite ajouter un distinct au code ci-dessous. Je ne peux pas comprendre la syntaxe exacte. Merci d'avance.Linq to Entities Clause distincte

var testdates = (from o in db.FMCSA_ME_TEST_DATA 
       orderby o.DATE 
       select new 
       { 
        RequestDate = o.DATE 
       }); 

Répondre

16

Utilisez la méthode d'extension Distinct().

Notez que Distinct() peut annuler le orderby existant (j'ai remarqué ceci dans LINQ to SQL), donc vous voudrez peut-être utiliser la méthode OrderBy() par la suite.

var testdates = (from o in db.FMCSA_ME_TEST_DATA 
       select new 
       { 
        RequestDate = o.DATE 
       }).Distinct().OrderBy(x => x.RequestDate); 
+0

Etes-vous sûr de Distinct() en annulant une commande? Je ne vois pas ce comportement (en exécutant une requête similaire) et serais très surpris si je le faisais. –

+0

@Adam - J'ai rencontré le problème OrderBy/Distinct avec LINQ to SQL, mais ce n'est peut-être pas un problème pour les autres fournisseurs LINQ . Voir http://programminglinq.com/blogs/marcorusso/archive/2008/07/20/use-of-distinct-and-orderby-in-linq.aspx – Greg

+0

Wow - Je ne connaissais pas ce bug. J'espère que c'est corrigé dans EF4, même si cela ne devrait pas affecter * cette * requête. +1 pour poster cela cependant. –

4
var testdates = (from o in db.FMCSA_ME_TEST_DATA 
       orderby o.DATE 
       select new 
       { 
        RequestDate = o.DATE 
       }).Distinct(); 

L'astuce consiste à envelopper votre requête entre parenthèses afin que vous pouvez appeler la méthode distincte, que vous l'avez déjà fait, tout ce que vous aviez besoin était de virer de bord sur l'appel de méthode à la fin.