2011-07-31 18 views
8

Jest struct S z 2 polami smyczkowych: A i B.LINQ wybrać niepuste ciągi

chcę przekonwertować tablicę S do tablicy ciągów, zawierający wszystkie niepusty wyjątkowy, jak i BS. Jaki jest najbardziej skuteczny sposób na to?

Pozdrawiam,

Odpowiedz

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

Przede działa tylko jeśli UNIQUE jest na wynikającym z kolekcji - jeśli trzeba wyjątkową presję na zbiorze A i B w następujących będzie działać:

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}. WybierzMany (x => x) .ToArray();

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

@Joey: Tak, aktualizowana - założenie jest wyjątkowość jest wymagane na A i B nie jest na wynikającym z kolekcji, poza pierwszym podejściem byłoby lepiej – BrokenGlass

+1

Dla przypomnienia, 'As.Concat (BS)' gdyby tworzyły wykonaj to samo co 'SelectMany' –

+0

@Claus Jørgensen: Doh! I znacznie prostszy i czytelny, zredagowany w wersji. – BrokenGlass

Powiązane problemy