Linq表达式在派生类型列表上

Joh*_*ore 4 linq

我正在尝试编写一个Linq表达式来检查派生类中的属性,但该列表由基类中的成员组成.示例代码如下.以'var list'开头的Process方法的第二行不能编译,但我不确定我应该用什么语法使它有效?

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; }
}
Run Code Online (Sandbox Code Playgroud)

dle*_*lev 7

如果您知道列表只有Derived,您可以使用以下Cast<T>方法:

var list = stuff.Cast<Derived>().Where(d => d.Name == "me");
Run Code Online (Sandbox Code Playgroud)

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

var list = stuff.OfType<Derived>().Where(d => d.Name == "me");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,Derived将跳过非对象.