2010-09-01 17 views
9

Kafa karıştırıcı başlıktan dolayı üzgünüm, ancak sorunumu açıklamak için daha iyi bir yol bulamadım.C# listeden bir alandan liste alma

Nesnelerim var, myList, onları 'MyObject' olarak adlandıralım. Ben sadece 'MyString' özelliğini kullanıyorum 'mylist' bir List<string> oluşturmak için güzel/kısa/fantezi yol arıyorum

Class MyObject 
{ 
    int MYInt{get;set;} 
    string MYString{get;set;} 
} 

List<MyObject> myList; 
... 

: nesneleri şuna benzer.

Bunu kullanarak myList.forEach() yapabilirsiniz ancak

Teşekkür güzel bir yol varsa ben merak ediyorum !! LINQ ile

cevap

13

:

bir IEnumerable<string> döndürür
var list = myList.Select(o => o.MYString); 

. Bir List<string> basitçe ToList() çağrısı eklemek almak için:

var strings = from x in myList 
       select x.MYString; 

List<string> list = strings.ToList(); 

Bu:

foreach (string s in list) 
{ 
    Console.WriteLine(s); 
} 
+1

Bu yapmak istediğiniz tüm bitti yinelerler ise, 'ToList gerekmez kayda değer olabilir()'. Bunu sadece yeni listeyi veya indeksi değiştirmeniz gerekiyorsa kullanın. – Timwi

1

İşte entegre sorgu sözdizimi kullanılarak Ahmad's answer var: zamanki gibi

var list = myList.Select(o => o.MYString).ToList(); 

Sonra sonuçları üzerinde yineleme ayrıca yazılabilir:

List<string> list = (from x in myList 
        select x.MYString).ToList(); 
1

Girdi ve çıktı listeleriniz List<T> ise, LINQ'ye gerek yoktur. Bunun yerine ConvertAll yöntemi kullanabilirsiniz:

List<string> listOfStrings = myList.ConvertAll(o => o.MYString); 
+0

iyi, benim durumumda, giriş ve çıkış aynı değil. giriş Listedir ve çıktı Liste 'dur. convertAll() hala çalışır? – edan

+0

“LINQ'a gerek yok” ne demek olmalı? LINQ tamamen ayrı bir kütüphane ya da bildiğiniz gibi değil. '.ConvertAll' veya' .Select' işlevlerini kullanmanız pratik bir fark yaratmaz. – Timwi

+0

@edan: Evet, 'ConvertAll 'yukarıdaki örneğimde olduğu gibi çalışacaktır. – LukeH