как добавить результат linq в список с ключом - PullRequest
0 голосов
/ 18 июня 2020

У меня есть linq, который находится внутри for l oop, я добавляю результаты в список с помощью addRange (), но он добавит все в один набор, например, мой первый результат l oop имеет 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);

                }

1 Ответ

1 голос
/ 18 июня 2020

У вас должна быть коллекция коллекций, например 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)) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...