2011-05-24 67 views
4

我想寫一個Linq表達式來檢查派生類中的屬性,但列表是由基類的成員組成的。下面的示例代碼。以'var list'開頭的Process方法的第二行不能編譯,但我不確定我應該使用什麼語法來使其有效?在派生類型列表上的Linq表達式

public class Manager 
{ 
    public void Process() 
    { 
     Base[] stuff = { new Derived() { Id = "1", Name = "me" } }; 

     var list = stuff.Where<Derived>(d => d.Name == "me"); 
    } 
} 

public class Base 
{ 
    public string Id { get; set; } 
} 

public class Derived : Base 
{ 
    public string Name { get; set; } 
} 

回答

7

如果你知道名單隻有Derived,您可以使用Cast<T>方法:

var list = stuff.Cast<Derived>().Where(d => d.Name == "me"); 

如果只有一些Derived,您可以使用OfType<T>

var list = stuff.OfType<Derived>().Where(d => d.Name == "me"); 

在這種情況下,非Derived對象將被跳過。