首页 > 解决方案 > 获取列表嵌套列表中的列表计数

问题描述

有人可以帮我计算多级嵌套列表中的列表数。

我使用 linq 进行查询,但无论我做什么,我都会得到顶级列表的计数。

我的班级如下

    [XmlRoot(ElementName = "Map")]
    public class FieldMap
    {
        [XmlAttribute(AttributeName = "fromPropertyName")]
        public string FromPropertyName { get; set; }
        [XmlAttribute(AttributeName = "toPropertyName")]
        public string ToPropertyName { get; set; }
    }

    [XmlRoot(ElementName = "Item")]
    public class Item
    {
        [XmlElement(ElementName = "Map")]
        public List<FieldMap> Map { get; set; }
    }

    [XmlRoot(ElementName = "Items")]
    public class Items
    {
        [XmlElement(ElementName = "Item")]
        public List<Item> Item { get; set; }
    }

    [XmlRoot(ElementName = "DataFieldMapper")]
    public class DataFieldMapper
    {
        [XmlElement(ElementName = "Map")]
        public List<FieldMap> Map { get; set; }
        [XmlElement(ElementName = "Items")]
        public Items Items { get; set; }
    }

    /**************************/

    [XmlRoot(ElementName = "Map")]
    public class FieldValue
    {
        [XmlAttribute(AttributeName = "propertyName")]
        public string PropertyName { get; set; }
        [XmlAttribute(AttributeName = "propertyValue")]
        public string PropertyValue { get; set; }
    }

    [XmlRoot(ElementName = "ItemValue")]
    public class ItemValue
    {
        [XmlElement(ElementName = "Map")]
        public List<FieldValue> Map { get; set; }
    }
    [XmlRoot(ElementName = "Items")]
    public class ItemValues
    {
        [XmlElement(ElementName = "ItemValue")]
        public List<ItemValue> ItemValue { get; set; }
    }


    [XmlRoot(ElementName = "GenericModel")]
    public class GenericModel
    {
        [XmlElement(ElementName = "Map")]
        public List<FieldValue> Map { get; set; }
        [XmlElement(ElementName = "Items")]
        public ItemValues Items { get; set; }
    }

    [XmlRoot(ElementName = "Collection")]
    public class GenericModelCollection
    {
        [XmlElement(ElementName = "GenericModel")]
        public List<GenericModel> GenericModel { get; set; }
    }

我正在尝试做类似的事情

int count = dict
  .GenericModel
  .Select(x => x.Items.ItemValue)
  .Select(p => p.Select(h => h.Map))
  .Count();

我总是最终得到顶级计数

标签: c#linq

解决方案


您需要展平列表以获取FieldValue模型中所有实例的计数:

int count = dict
  .GenericModel
  .SelectMany(x => x.Items.ItemValue)
  .SelectMany(h => h.Map)
  .Count();

推荐阅读