如何在C#的嵌套循环中为特定数据对象添加元素?

时间:2019-04-01 14:41:54

标签: c# list linq

我有一个如下数据对象:

public class RootObject
{ 
  public string ticker {get;set;}
  public List<Result> results {get;set;} 
}

和结果对象就像:

{
  public double open {get;set;}
  public double close {get;set;}
}

现在每次相同的置顶我都会得到多个结果。所以我想将所有结果元素添加到相同的置顶栏中。而不是将其多次创建到列表中。

public static List<RootObject> minuteAggregateList = new List<RootObject>();
public void historicalMinuteAggData(string symbol)
        {
            int daysCount = 0;
            for(int i=1; i<=20; i++)
            {
                DateTime date = DateTime.Now.Date.AddDays(-i);
                if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
                {
                    daysCount++;
                    var startUnixTime = (date.Add(new TimeSpan(13, 30, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
                    var endUnixTime = (date.Add(new TimeSpan(20, 00, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
                    using (var reader = new StreamReader(new WebClient().OpenRead(string.Format("API For Fetch Data"))))
                    {
                        var x = reader.ReadLine();
                        RootObject data = JsonConvert.DeserializeObject<RootObject>(x);
                        minuteAggregateList.Add(data);
                    }
                }
                if (daysCount == 7)
                    break;
            }
        }

现在,它为我们在minuteAggregateList中的相同报价提供了多个结果。我如何需要AAPL在列表中,然后在AAPL的嵌套结果中添加新元素。那么,如何使在特定行情自动收录器下的嵌套位置添加元素成为可能?

2 个答案:

答案 0 :(得分:1)

在将数据添加到列表之前,需要检查相同的报价器值。

public static List<RootObject> minuteAggregateList = new List<RootObject>();
public void historicalMinuteAggData(string symbol)
        {
            int daysCount = 0;
            for(int i=1; i<=20; i++)
            {
                DateTime date = DateTime.Now.Date.AddDays(-i);
                if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
                {
                    daysCount++;
                    var startUnixTime = (date.Add(new TimeSpan(13, 30, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
                    var endUnixTime = (date.Add(new TimeSpan(20, 00, 00)).Subtract(new DateTime(1970, 1, 1))).TotalMilliseconds;
                    using (var reader = new StreamReader(new WebClient().OpenRead(string.Format("API For Fetch Data"))))
                    {
                        var x = reader.ReadLine();
                        RootObject data = JsonConvert.DeserializeObject<RootObject>(x);
                        if(minuteAggregateList.Any(node => node.ticker == data.ticker))
                        {
                             minuteAggregateList.Where(node => node.ticker == data.ticker)
                                                .Select(val => {
                                                      val.results.AddRange(data.results); 
                                                      return val;
                                                        }).ToList();
                        }
                        else
                        {
                             minuteAggregateList.Add(data);
                        }
                    }
                }
                if (daysCount == 7)
                    break;
            }
        }

要将数据添加到匹配列表中,首先需要选择匹配的行情自动收录器(即使用Where())。 然后在Select()中添加结果数据。 之后,需要使用ToList()将更改应用于现有列表。

答案 1 :(得分:1)

从下面的代码中,您可以将结果列表添加到现有的报价列表中,也可以将列表放置在所选位置。

label