【问题标题】:Linq expression over a list of derived types派生类型列表上的 Linq 表达式
【发布时间】:2011-05-24 23:54:23
【问题描述】:

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

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; }
}

【问题讨论】:

    标签: linq


    【解决方案1】:

    如果您知道列表中只有Derived,则可以使用Cast&lt;T&gt; 方法:

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

    如果只有一些Derived,你可以使用OfType&lt;T&gt;

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多