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

时间:2011-05-24 15:51:51

标签: 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; }
}

1 个答案:

答案 0 :(得分: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个对象。