Связывание данных из двух списков в c#

#c# #.net #list #arraylist

#c# #.net #Список #arraylist

Вопрос:

у меня есть информация, которую я поместил в два списка из базы данных, первый список содержит объект узла, который имеет атрибуты ID, LAT и LONG.

Второй список содержит несколько ключей и значений для каждого идентификатора в первом списке. приведенные ниже изображения лучше иллюстрируют мое объяснение. то, что я пытаюсь сделать, это добавить все эти ключи и значения в первый список для каждого идентификатора. Любая помощь о том, как это сделать, была бы очень признательна.

информация, которую я поместил в два списка. также это два списка объектов.

Изображение объектов в первом списке

Изображение вещей во втором списке

По сути, один список содержит первичные ключи из таблицы, второй список — внешние ключи. я хочу добавить второй список к первому в одной строке
, например

ИДЕНТИФИКАТОР, ШИРОТА, ДЛИНА, [КЛЮЧ, ЗНАЧЕНИЕ],[КЛЮЧ, ЗНАЧЕНИЕ]…. в зависимости от того, сколько их

Ответ №1:

Я не уверен, ищете ли вы:

  • (1) SQL-запрос, который возвращает таблицу в формате ID, LAT, LONG, [KEY, VALUE], ... или
  • (2) способ связать данные в этих двух таблицах с использованием объектов C #.

Я собираюсь предположить последнее.

Вы могли бы поместить все эти пары ключ-значение в a Dictionary<string, string> внутри Node класса.

 public class Node
{
    public long ID { get; }
    public int Latitude { get; }
    public int Longitude { get; }
    public Dictionary<string, string> KeyValuePairs { get; }
}

public class KeyValuePair
{
    public long NodeID { get; }
    public string Key { get; }
    public string Value { get; }
}
  

А затем выполните итерацию по обоим спискам, добавив пары ключ-значение в словарь.

 // Let's suppose we got these populated from the DB
var nodeList = new List<Node>();
var keyValuePairs = new List<KeyValuePair>();

// If we get too many rows from the DB, we'll get better performance by ordering the lists
var orderedNodesArray = nodeList.OrderBy(n => n.ID).ToArray();
var orderedKVPairsArray = keyValuePairs.GroupBy(kv => kv.NodeID).OrderBy(g => g.Key).ToArray();

var i = 0;
var j = 0;
while (i < orderedNodesArray.Length amp;amp; j < orderedKVPairsArray.Length)
{
    var node = orderedNodesArray[i];
    var kvPair = orderedKVPairsArray[j];

    if (node.ID < kvPair.Key) i  ;
    else if (node.ID > kvPair.Key) j  ;
    else
    {
        foreach (var kv in kvPair)
            node.KeyValuePairs.Add(kv.Key, kv.Value);

        i  ;
        j  ;
    }
}