搜索多个类型对象的数组

时间:2015-06-24 09:49:56

标签: linq c#-4.0

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

项目可以包含任何OR或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;

}

2 个答案:

答案 0 :(得分:0)

我找到了解决方案

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();

答案 1 :(得分:0)

从具有Name属性的接口/抽象基类派生您的类,并使abc类的Items属性成为该类型的数组...如果您将来添加另一个类,您的代码将会中断(检查类型) if else打破SOLID中的Open Close原则