Linq 多类型对象数组的搜索

Linq 多类型对象数组的搜索,linq,c#-4.0,Linq,C# 4.0,在下面的场景中,我有一个拥有对象数组的主类abc或另一个对象/类。 我的问题是如何使用items属性在类ABC上按名称搜索 项目可以有任何对象或DT class abc { [System.Xml.Serialization.XmlElementAttribute("OR", typeof(OR))] [System.Xml.Serialization.XmlElementAttribute("DT", typeof(DT))] public o

在下面的场景中,我有一个拥有对象数组的主类abc或另一个对象/类。 我的问题是如何使用items属性在类ABC上按名称搜索

项目可以有任何对象或DT

class abc
{

        [System.Xml.Serialization.XmlElementAttribute("OR", typeof(OR))]
        [System.Xml.Serialization.XmlElementAttribute("DT", typeof(DT))]
        public object[] Items {
            get {
                return this.itemsField;
            }
            set {
                this.itemsField = value;
            }
        }
}

public class OR 
{

    public string name;

}

public class DT 
{

    public string name;

}
我找到了解决办法

var data = from s in abc
                          from i in s.Items
                          select
                              new
                                  {
                                      objType = i.GetType() == typeof(OR)                                             
                                            ? ((OR)i).name : i.GetType() == typeof(DT)                                            
                                            ? ((DT)i).name : string.Empty,
                                      objAbc = s
                                  };

IEnumerable<abc> data = journey.Where(x => x.objType.Contains("myname")).Select(y => y.objAbc).ToList();
var数据=来自abc中的s
来自美国的i.项目
选择
新的
{
objType=i.GetType()==typeof(或)
?((或)i).name:i.GetType()==typeof(DT)
?((DT)i).name:string.Empty,
objAbc=s
};
IEnumerable data=travely.Where(x=>x.objType.Contains(“myname”))。选择(y=>y.objAbc.ToList();

从具有Name属性的接口/抽象基类派生类,并使abc类的Items属性成为该类型的数组……如果将来添加另一个类,则代码将中断(如果else在实体中中断开-关原则,请在中检查类型)