Запрос LINQ сохраняет значения в KeyValuePairсписок, но затем не может сохранить их все с помощью addrange - PullRequest
0 голосов
/ 12 июня 2018

Следующий запрос LINQ получает все параметры для всех станций, каждая станция (x.station) имеет параметры X (x.parameters), и все они нужны как для «Результата», так и для «Значения».Поначалу это может немного сбить с толку, поскольку эта строка:

 from x in selection.Parameters

представляет x станций, а не x параметров.

Запрос LINQ:

        var selectionData = 
            from x in selection.Parameters
            select new
            {
                Result = "(p.col_IdEstacion = " + x.Station + " and p.col_Sigla in(" +
                            ("'" + string.Join("','", x.Parameters) + "'") + "))",
                Values = 
                (
                    from y in x.Parameters
                    select new KeyValuePair<string, string>(
                        x.Station.ToString(), y)).ToList()
            };

причина, по которойЯ делаю это потому, что я хочу сохранить все параметры на всех станциях, которые позже будут храниться в «Значениях» в списке KeyValuePair:

  List<KeyValuePair<string, string>>  myList

ОБНОВЛЕНО : обнаружен кодработает, что я делаю неправильно, чтобы добавить 'Значения' в список, это может быть FirstOrDefault (), который принимает только первый:

      values.AddRange(selectionData.Select(d => d.Values).FirstOrDefault());

ОТВЕТ : выяснилправильный способ сохранить все значения, полученные с помощью LINQ, использует SelectMany , например:

valores.AddRange (selectionData.SelectMany (d => d.Values))

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 июня 2018

ОТВЕТ : обнаружен правильный способ хранения всех значений, полученных с помощью LINQ, с использованием SelectMany , например:

valores.AddRange (selectionData.SelectMany (d=> d.Values))

0 голосов
/ 12 июня 2018

Вы можете попробовать это с помощью ToDictionary вместо

Но так как я не говорю такого рода linq, я работаю только с цепочкой методов, я не уверен, что это скомпилируется, но, возможно, это такподсказка для вас, что попробовать.

var selectionData = 
            from x in selection.Parameters
            select new
            {
                Result = "(p.col_IdEstacion = " + x.Station + " and p.col_Sigla in(" +
                            ("'" + string.Join("','", x.Parameters) + "'") + "))",
                Values = x.Parameters.ToDictionary(k=>k.Station.ToString(), v=>v)
            };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...