正在向列表中的列表添加值
本文关键字:列表 添加 | 更新日期: 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;
}