【问题标题】:Linking data in from two lists in c#在c#中从两个列表中链接数据
【发布时间】:2021-02-28 20:31:34
【问题描述】:

我有我从数据库中放入两个列表的信息, 第一个列表包含一个节点对象,该对象具有 ID、LAT 和 LONG 属性。

第二个列表对于第一个列表中的每个 ID 都有多个键和值。 下面的图片更好地说明了我的解释。 我要做的是将所有这些键和值添加到每个 ID 的第一个列表中。任何有关如何解决此问题的帮助将不胜感激。

我已放入两个列表中的信息。这也是两个对象列表。

Image of things in first list

Image of things in second list

基本上一个列表具有表中的主键,第二个列表作为外键。 我想将第二个列表添加到一行中的第一个
例如

ID,LAT,LONG,[KEY,VALUE],[KEY,VALUE].... 取决于有多少

【问题讨论】:

    标签: c# .net list arraylist


    【解决方案1】:

    我不确定您是否正在寻找:

    • (1) 返回格式为ID, LAT, LONG, [KEY, VALUE], ...
    • 的表的SQL 查询
    • (2) 一种使用 C# 对象关联这两个表中的数据的方法。

    我假设是后者。

    您可以将所有这些键值对放在 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 && 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++;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2013-06-04
      相关资源
      最近更新 更多