C# 向列表中的列表添加值

C# 向列表中的列表添加值,c#,asp.net,C#,Asp.net,我有一个从fetchXML查询中填充的列表,但不幸的是,它返回了许多具有重复标题的事件。因此,作为一个解决方案,我希望遍历列表中的每个项目,如果标题与前一个项目相同,那么我希望将item.YearId&item.Year中的值添加到前一个循环项目中的年份列表中 var result = from p in fetchResults.Root.Elements("result") ... //etc //Creating another list to contain desired resul

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

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;
}
var result=来自fetchResults.Root.Elements(“结果”)中的p//等
//创建另一个列表以包含所需结果。
List eventDetails=新列表();
//创建以存储以前循环的标题。
string previousTitle=string.Empty;
foreach(结果中的var项目)
{
if(item.Name==上一个标题)
{
//不确定如何将item.yearId和item.Year添加到年份
//在先前循环的列表中列出。
}
其他的
{
//否则,将who项目添加到eventDetails列表。
事件详细信息。添加(项目);
}
previousTitle=项目名称;
}
因此,Event类包含一个Year list属性,该属性由guid(item.YearId)和int(item.Year)组成


希望这是有意义的。任何例子都很好。谢谢。

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


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

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;
}
var result=来自fetchResults.Root.Elements(“结果”)中的p//等
//创建另一个列表以包含所需结果。
List eventDetails=新列表();
//创建以存储以前循环的标题。
string previousTitle=string.Empty;
//前事
Event-previousEvent=null;
foreach(结果中的var项目)
{
if(item.Name==previousTitle&&previousEvent!=null)
{
//添加到上一个事件
上一事件。年度列表。添加(项目。年度);
previousEvent.yearIdList.Add(item.YearId);
}
其他的
{
//否则,将who项目添加到eventDetails列表。
事件详细信息。添加(项目);
}
previousTitle=项目名称;
previousEvent=项目;
}

您可以使用类似的东西。我不知道你的事件对象是什么样子的,但是你应该知道

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;
    }
}
List eventDetails=new List();
Event lastEvent=null;
foreach(结果中的var项目)
{
if((lastEvent!=null)&&(lastEvent.Name==item.Name))
{
lastEvent.AddYearAndYearId(item.Year,item.YearId);
eventDetails[eventDetails.Count-1]=lastEvent;
}
其他的
{
事件详细信息。添加(项目);
lastEvent=项目;
}
}

抱歉,因为我认为我在问题中没有明确说明这一点,但一旦您在早期事件中发现名称相同,您将如何将其存储回刚才添加的eventDetails行中。只是我想在eventDetails中存储的第一项中建立一个年份列表(每个连续行共享相同的名称)。希望这是有意义的。您可以使用如下内容:earlierEvent.AddYearAndYearId(item.Year,item.YearId);eventDetails[eventDetails.Count-1]=earlierEvent;再举一次你的例子,一旦我找到了一个重复的名字,我将如何在我刚刚添加到eventDetails列表的项目中建立年份列表?谢谢
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;
    }
}