2009-12-14 7 views
6

dato il seguente codice:distinta può essere espresso utilizzando la cosiddetta ricerca incorporato, piuttosto che una chiamata di metodo

string[] colors = {"red","green","blue","red","green","blue"}; 
var distinctColors = (from c in colors select c).Distinct(); 
distinctColors.Dump(); 

E 'possibile piegare la chiamata .Distinct() nella sintassi di query incorporato?

qualcosa come int T-SQL

select distinct color from TableofColors 
+2

Tra l'altro, si chiama Query comprensione della sintassi. – SLaks

+4

@SLaks: O semplicemente "espressioni di query" come da sezione 7.15 della specifica. –

risposta

8

s 'C# la sintassi delle espressioni di query non include "distinti". VB fa, tuttavia - per esempio, dal MSDN docs for VB's Distinct clause:

// VB 
Dim customerOrders = From cust In customers, ord In orders _ 
        Where cust.CustomerID = ord.CustomerID _ 
        Select cust.CompanyName, ord.OrderDate _ 
        Distinct 

Il C# equivalente avrebbe dovuto chiamare in modo esplicito Distinct() in notazione del punto.

Tuttavia, il vostro esempio può ancora essere semplificata:

string[] colors = {"red","green","blue","red","green","blue"}; 
var distinctColors = colors.Distinct(); 
distinctColors.Dump(); 

Non credo che si avete di usare le espressioni di query da usare LINQ :)

1

sintassi comprensione query non supporta il metodo Distinct.

Nel tuo caso, potresti semplicemente scrivere colors.Distinct(); non stai facendo nulla con l'espressione della query.

2

Non esiste una sintassi di query incorporata distinta in C# per quanto ne so. Questo è il più vicino come si arriva:

var distinctColors = (from color in colors 
         select color).Distinct() 
0

Si può provare questo

var dis = from c in colors 
    group c by c; 

foreach (var cVal in dis) 
    { 
     string s = cVal.Key; 
    } 
+0

Ciò restituirà un 'IEnmerable >', non un 'IEnumerable '. – SLaks

+0

Si dovrebbe scrivere 'da c nel gruppo di colori c di c in c selezionare c.Key'. Inoltre, probabilmente sarà un po 'più lento di "Distinct". – SLaks

+0

SLaks. Avete qualche gruppo di prove statistiche più lento e distinto? –

Problemi correlati