Получить записи из универсального объекта с помощью LINQ C#
У меня есть общий объект, и мне нужно получить элемент {код, описание} с помощью LINQ Query
Учебный класс
[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
2 ответа
* РЕДАКТИРОВАТЬ *
Судя по вашим изменениям, кажется, что ваша проблема связана с типом данных, который вы получаете от вашего метода "ObjectToXML" - это возвращает что-то типа Object
судя по вашему коду, а не по типу, который вы указали в своем вопросе. Вы можете попытаться привести к ожидаемому типу eg. Gender GenderObject = (Gender)SystemCore.XMLPrasing.ObjectToXML(...)
, что может привести к сбою (если возвращаемый тип на самом деле не Gender). Или вы можете использовать.NET встроенную десериализацию XML, которая сможет возвращать объекты правильного типа.
Несмотря на довольно странную структуру данных (какие усилия для списка полов?), Если вы хотите 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]
Это должно работать для вас, если вы приведете нужный объект к Gender, а затем сделаете выбор на нем:
var genderList = ((Gender)GenderObject).GenderListWrap.SelectMany(x => x.GenderList);
Это вернет коллекцию Item
с которой у вас будет {code, description}, который вы ищете.