2011-07-31 24 views
8

Orada 2 dize alanları ile bir yapı S seçin. Bunun için en etkili yol nedir? benzersiz kısıtlama çıkan koleksiyon açıksaLINQ Boş olmayan dizeleri

Selamlar, sadece Üstü

cevap

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

işleri - A en setinde benzersiz kısıtlama ihtiyaç ve eğer B çalışacak aşağıdaki:

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 = yeni [] {As, Bs} .SelectMany (x => x) .ToArray();

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

@Joey: Evet, güncelleştirilmiş - varsayım A'lar gereklidir benzersizliği ve B aksi takdirde ilk yaklaşım kaydı, 'As.Concat (Bs)' olur İçin – BrokenGlass

+1

daha iyi olurdu, ortaya çıkan koleksiyonunda değil 'SelectMany' –

+0

@ Claus Jørgensen ile aynı şeyi yapın: Doh! Ve çok daha basit ve okunabilir, bunu düzenledi. – BrokenGlass

İlgili konular