2009-09-04 26 views
14

Bir sütun dizisi sorgusunu bir dize dizisine dönüştürmenin en etkili yolu nedir?Dize sorgusunu dize dizisine dönüştürme - C#

string[] list = db.Words.OrderBy(w=> w.Word).Select(w => w.Word).ToArray(); 

hatta daha kısa: -

private string[] WordList() 
    { 
     DataContext db = new DataContext(); 

     var list = from x in db.Words 
        orderby x.Word ascending 
        select new { x.Word }; 

     // return string array here 
    } 

Not x.Word Eğer ToArray yöntemi ile biraz daha kolay yapabilir yerine Lambda sözdiziminde bunu yazarsanız bir dize

cevap

30

Ben lambda tarzı tercih ve gerçekten veri bağlamını bertaraf edilmesi gerektiğini:

Aksi takdirde deneyebilirsin.

private string[] WordList() 
{ 
    using (DataContext db = new DataContext()) 
    { 
     return db.Words.Select(x => x.Word).OrderBy(x => x).ToArray(); 
    } 
} 
+2

Gc'yi bir antrenmana vermek istiyorum! - sadece şaka - bu çok iyi bir nokta. Teşekkürler. –

+0

Harika bir çözüm! –

4

geçerli:

return db.Words.OrderBy(w => w.Word).Select(w => w.Word).ToArray(); 
+0

hem hata verebilir - örtük türü dönüştürülemez 'Kelime []' 'dizesi []' –

+0

.Word ilk yolu bu hata veriyor – Robban

7

ne dersiniz:

Bu, x.Word'un aslında bir dize olduğu varsayılmaktadır.

return list.Select(x => x.ToString()).ToArray(); 
+0

bit cevapsız, bunu Düzeltilmiş için - dolaylı türünü 'AnonymousType 1. dönüştürülemez [] 'string' [']. İkinci yöntem işe yarıyor! Teşekkürler! –

+0

Seçtiğiniz yeni {} öğesini atlayın ve anonim tipin paketini açmanız gerekmeyecek, sadece bir stringiniz olacak (Word'ün bir karakter sütunu olduğu varsayılarak). – tvanfosson

+0

@tvanfosson, "Anonim tip * paketini açmak" ne demektir? (Bu cevaba bir düzenleme yapıldığını varsayıyorum, çünkü artık herhangi bir "yeni {}" göremiyorum.) – kdbanman