正在向列表中的列表添加值

本文关键字:列表 添加 | 更新日期: 2023-09-27 17:58:11

我有一个从fetchXML查询填充的列表,但不幸的是,它返回了许多具有重复标题的事件。因此,作为一个解决方案,我希望循环浏览列表中的每个项目,如果标题与前一个项目相同,那么我希望添加项目中的值。YearId&项目年份到以前循环项目中的年份列表。

var result = from p in fetchResults.Root.Elements("result") ... //etc
//Creating another list to contain desired results.
List<Event> eventDetails = new List<Event>();
//Create to store the previously looped title.
string previousTitle = string.Empty;
foreach (var item in result)
{
    if (item.Name == previousTitle)
    {
        //Not sure how to add item.yearId and item.Year to a Year
        //list inside the previously looped.
    }
    else
    {
        //otherwise add who item to eventDetails list.
        eventDetails.Add(item);
    }
    previousTitle = item.Name;
}

因此,Event类包含一个Year列表属性,该属性由guid(item.YearId)和int(item.Year)组成。

希望这是有道理的。任何例子都很好。非常感谢。

正在向列表中的列表添加值

您可以使用这样的东西。我不知道你的活动对象是什么样子的,但你应该知道。

List<Event> eventDetails = new List<Event>();
Event lastEvent = null;
foreach (var item in result)
{
    if ((lastEvent != null) && (lastEvent.Name == item.Name))
    {
        lastEvent.AddYearAndYearId(item.Year, item.YearId);
        eventDetails[eventDetails.Count - 1] = lastEvent;
    }
    else
    {
        eventDetails.Add(item);
        lastEvent = item;
    }
}

我认为在从xml获取项目时应该使用分组。类似于(只是一个示例,因为我不知道你的xml看起来怎么样):

var result = from p in fetchResults.Root.Elements("result")
             group p by p.Name into g
             select new Foo { 
                  Name = g.Key, 
                  Years = g.Select(x => (int)x.Element("year")).ToList()
             };

创建对上一项的引用并使用该引用,使您的代码成为

var result = from p in fetchResults.Root.Elements("result")... //etc
//Creating another list to contain desired results.
List<Event> eventDetails = new List<Event>();
//Create to store the previously looped title.
string previousTitle = string.Empty;
//Reference to previous event
Event previousEvent = null;
foreach (var item in result)
{
    if (item.Name == previousTitle && previousEvent != null)
    {
        //Add to the previous event
        previousEvent.yearList.Add(item.Year);
        previousEvent.yearIdList.Add(item.YearId);
    }
    else
    {
        //otherwise add who item to eventDetails list.
        eventDetails.Add(item);
    }
    previousTitle = item.Name;
    previousEvent = item;
}