使用 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
的集合,您将在其中找到您正在寻找的 {代码,描述}。
我有通用对象,我需要使用 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
的集合,您将在其中找到您正在寻找的 {代码,描述}。