2011-07-31 13 views
8

Hay una estructura S con 2 campos de cadena: A y B.LINQ seleccionar cadenas no vacías

Quiero convertir una matriz de S en la matriz de cadenas, que contiene toda medida única que no está vacía y Bs. ¿Cuál es la forma más eficiente para eso?

Saludos,

Respuesta

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

anterior sólo funciona si la restricción única se encuentra en la colección resultante - si necesita una restricción única en el conjunto de calificaciones de A y B a la siguiente funcionarí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} .SelectMany (x => x) .ToArray();

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

@Joey: Sí, actualizado - suposición es la singularidad que se requiere en la A y B no está en la colección resultante, de lo contrario primera aproximación sería mejor – BrokenGlass

+1

Para el registro, 'As.Concat (B)' haría haga lo mismo que el 'SelectMany' –

+0

@Claus Jørgensen: Doh! Y es mucho más simple y legible, editado que en. – BrokenGlass

Cuestiones relacionadas