2011-07-31 26 views
8

C'è una struct S con 2 campi stringa: A e B.LINQ selezionare le stringhe non vuote

voglio convertire una serie di S in array di stringhe, che contiene tutti i non-vuoto unico Come e breakfast. Qual è il modo più efficace per farlo?

saluti,

risposta

11
var myArray = S.Select(x => new [] { x.A, x.B }) 
       .SelectMany(x => x) 
       .Where(x=> !string.IsNullOrEmpty(x)) 
       .Distinct() 
       .ToArray(); 

Sopra funziona solo se il vincolo unico è sulla raccolta conseguente - se avete bisogno di un vincolo univoco sul set di A e di B il seguente dovrebbe funzionare:

var As = S.Select(x => x.A) 
      .Where(x=> !string.IsNullOrEmpty(x)) 
      .Distinct(); 
var Bs = S.Select(x => x.B) 
      .Where(x=> !string.IsNullOrEmpty(x)) 
      .Distinct(); 

var myArray = new [] {As, Bs} .SelectMany (x => x) .ToArray();

var myArray = As.Concat(Bs).ToArray(); 
+0

@Joey: Sì, aggiornato - ipotesi è l'unicità è richiesta sulla A e B non è sulla raccolta conseguente, altrimenti primo approccio sarebbe meglio – BrokenGlass

+1

Per la cronaca, 'As.Concat (Bs)' sarebbe fare lo stesso di 'SelectMany' –

+0

@Claus Jørgensen: Doh! Ed è molto più semplice e leggibile, editato in. – BrokenGlass

Problemi correlati