2011-02-10 15 views
27

System.Collections.Generic.List`1 [Görev]' yazın'Basit LINQ ve Liste hatası: WhereListIterator`1 [Görev] 'Ben sorun anlama benim hata yaşıyorum

Yöntem:

public List<Task> GetAllTasks() 
{ 
    var AllTasks = from t in tasks 
        where t.Status.ToString() == "Completed" || t.Status.ToString() == "Pending" 
        select t; 

    return (List<Task>)AllTasks; 
} 
arkasında

Kodu:

: Ben onları görüntülemek için başka bir sayfaya yönlendirme (AddTask.aspx) bir görev ekledikten sonra

protected void Page_Load(object sender, EventArgs e) 
{ 
    TaskList tdl = (TaskList)Session["TodoList"]; 
    List<Task> AllTasks = tdl.GetAllTasks(); 
    string str = ""; 

    foreach (Task t in AllTasks) 
    { 
     str += t.ToString() + "<br />"; 
    } 

    LblTasks.Text = str; 

} 

, o zaman ben çalışma zamanı hatası alıyorum

'WhereListIterator 1[Task]' to type 'System.Collections.Generic.List 1 [Görev]' türünde nesne dönüştürülemiyor.

LINQ'umda bir sorun var mı? Dün alemi yeni öğrendim.

Teşekkürler.

cevap

53

Doğrudan bir sorguya veya döndürdüğünüzde bir .ToList() gerekir.

olduğu gibi
var AllTasks = (from t in tasks 
       where t.Status.ToString() == "Completed" || t.Status.ToString() == "Pending" 
       select t).ToList(); 

Ya

return AllTasks.ToList(); 
+0

teşekkürler sürü! Bu işe yarıyor. ToList() öğesinin noktasını görüyorum, ancak nasıl oluyor da tipik kadro çalışmıyor? –

+4

@Ken, LINQ sorgulama yöntemleri, IEnumerable 'yi uygulayan herhangi bir diziye karşı çalışmak üzere tasarlanmıştır ve tembel olarak değerlendirilir. Bir "Liste " kaynağı olan kaynak alakalı değil. Eğer somut koleksiyonlar istiyorsanız, 'ToArray(), ToList(), ToDictionary(), 'vb. Gibi destekleme yöntemleri sağladılar. –

+0

Böyle basit bir çözüm, teşekkürler! –

İlgili konular