首页 > 解决方案 > 如何将 linq 结果添加到带有键的列表中

问题描述

我有一个在 for 循环内的 linq,我使用 addRange() 将结果添加到列表中,但它会将整个内容添加到一个集合中,例如我的第一个循环结果有 16 个项目,第二个有 10 个项目。 ..我希望将它们添加到这样的列表中,然后我可以在列表中看到每个查询中添加了多少和哪些项目

public List<statisticsDaily> dailyStat(List<string> id,string dtFrom,string dtTo)
            {
                List<StatisticsDaily> rsltofquery = new List<StatisticsDaily>();
                for (int i = 0; i < id.Count; i++)
                {
                    var rslt = (from d in db.statDaily
                                join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
                                where d.m_turbine_id == IPAddress.Parse(id[i]) && d.m_date >= frm && d.m_date <= to
                                select new StatisticsDaily
                                {
                                    m_wind_speed = d.m_wind_speed,
                                    Date = d.m_date.ToString("yyyy-MM-dd"),
                                    name = s.turbine_name,
                                    Production = d.m_energy_prod,
                                    Availability = d.m_corrected_av


                                }
                         ).AsEnumerable().OrderBy(s => s.Date).ToList();
                                    rsltofquery.AddRange(rslt);

                }

标签: c#

解决方案


您需要收集诸如List<List<StatisticsDaily>>.

所以你的代码将是:

public List<List<statisticsDaily>> dailyStat(List<string> id,string dtFrom,string dtTo)
{
  List<List<StatisticsDaily>> rsltofquery = new List<List<StatisticsDaily>>();
  for (int i = 0; i < id.Count; i++)
  {
    var rslt = (from d in db.statDaily
    join s in db.masterData on d.m_turbine_id equals s.m_turbine_id
      where d.m_turbine_id == IPAddress.Parse(id[i]) && d.m_date >= frm && d.m_date <= to
      select new StatisticsDaily 
      {
        m_wind_speed = d.m_wind_speed,
        Date = d.m_date.ToString("yyyy-MM-dd"),
        name = s.turbine_name,
        Production = d.m_energy_prod,
        Availability = d.m_corrected_av
      }).AsEnumerable().OrderBy(s => s.Date).ToList();
    rsltofquery.Add(rslt);
  }
}

如果你想使用所有元素,而不是部分,你可以使用SelectMany

var x = dailyStat(id, dtFrom, dtTo);
foreach (var e in x.SelectMany(d => d)) ...

推荐阅读