使用 LINQ C# 从通用对象获取记录

Get records from Generic Object using LINQ C#

我有通用对象,我需要使用 LINQ 查询从中获取项目{code, description}

Class

  [Serializable]
[XmlRoot("Genders")]
public class Gender
{

    [XmlElement("Genders")]
    public List<GenderListWrap> GenderListWrap = new List<GenderListWrap>();       
}


public class GenderListWrap
{
    [XmlAttribute("list")]
    public string ListTag { get; set; }

    [XmlElement("Item")]
    public List<Item> GenderList = new List<Item>();
}



public class Item
{
    [XmlElement("CODE")]
    public string Code { get; set; }

    [XmlElement("DESCRIPTION")]
    public string Description { get; set; }
}

在下面的屏幕截图中,我在 GenderObject 中看到了我的数据

* 编辑 *

根据您的编辑,您的问题似乎与您从 "ObjectToXML" 方法接收到的数据类型有关 - 这个 return 看起来是 Object 类型的您的代码,而不是您在问题中指定的类型。您可以尝试转换为预期的类型 eg. Gender GenderObject = (Gender)SystemCore.XMLPrasing.ObjectToXML(...),这 可能会 失败(如果 returned 类型实际上不是性别)。或者您可以使用 .NET 内置的 XML 反序列化,它将能够 return 正确类型的对象。


尽管您的数据结构相当奇怪(为什么要为性别列表付出如此大的努力?),如果您想要 List<Item>,以下将仅将项目投影到列表中:

genders.GenderListWrap.SelectMany(l => l.GenderList).ToList();

(假设您有一个名为 genders 的实例,构造如下:

var genders = new Gender
{
    GenderListWrap = new List<GenderListWrap>
    {
        new GenderListWrap
        {
            GenderList = new List<Item>
            {
                new Item { Code = "F", Description = "Female" },
                new Item { Code = "M", Description = "Male" },
            }
        },
        new GenderListWrap
        {
            GenderList = new List<Item>
            {
                new Item { Code = "N", Description = "Neutral" },
            }
        }
    }
};

var genderList = genders.GenderListWrap.SelectMany(l => l.GenderList).ToList();

但是,如果您想获取特定项目,您可以只使用评论中提到的标准索引访问器,例如。 genders.GenderListWrap[0].GenderList[0]

这应该对您有用,如果您将对象强制转换为性别,然后对其执行 select:

var genderList = ((Gender)GenderObject).GenderListWrap.SelectMany(x => x.GenderList);

这将 return Item 的集合,您将在其中找到您正在寻找的 {代码,描述}