【问题标题】:Filling a multi-value dictionary with query results用查询结果填充多值字典
【发布时间】:2011-10-22 04:42:27
【问题描述】:

我正在通过 SQL 查询检索五列。在检索到的列中,我有一列 RecordID 应该充当字典的

我指的是在 StackOverflow 上发布的解决方案:C# Multi-Value Dictionary,但根据我的情况,我无法有效地使用它。

我想存储查询的所有行,但 RecordID 列也应该作为字典元素的键。我想要类似的东西:

Dictionary<RecordID, Entire columns of the current row for this RecordID>

我认为另一种方法是使用数组,例如:

Dictionary<key,string[]>

但我想使用任何超快速的方式。

【问题讨论】:

    标签: c# .net .net-3.5 collections generics


    【解决方案1】:

    使用Lookup - 你没有对数据说太多,但你可能需要一些简单的东西:

    var lookup = list.ToLookup(x => x.RecordID);
    

    当然,ToLookup 的重载允许您做其他事情。

    【讨论】:

    • @Jon:请问您想了解有关数据的哪些信息?要查看 SQL 查询吗?
    • @RPK:目前还不清楚您要获取哪些值,或者您是否使用 LINQ 开始(因为分组可能可以在数据库中透明地完成)等。基本上我们不知道您当前的代码是什么样的。但是ToLookup 应该是你的朋友...
    • @Jon 我正在通过 SQL 将行挑选到数据集中。整行由以下列组成:RecordID、ItemID、ItemName、SalePrice、AvailableQty。
    • @RPK:你为什么不使用 LINQ 开始?无论如何,您应该能够轻松地将ToLookup 与数据集一起使用。您可能想先致电DataTable.AsEnumerable() 以获取IEnumerable&lt;DataRow&gt;
    • @RPK:它们是完全不同的数据结构。这些天我个人尽量避免使用 DataSet/DataTable 等。
    【解决方案2】:

    天哪,你需要一个专门的班级来保存价值观。由于列来自 db 表,因此字段数是固定的。因此,您可以拥有一个具有固定字段的类,而不是动态增长的集合。最后使用KeyedCollection&lt;TKey, TItem&gt; 结构来保存记录集合。在KeyedCollection&lt;TKey, TItem&gt; 中,TKey 部分嵌入在TItem 中,在您的情况下为RecordId

    class Record
    {
        public int Id { get; set; }
        //rest of the fields
    }
    

    您的结构应该类似于KeyedCollection&lt;int, Record&gt;。它也保留了插入顺序。您可以通过索引器使用RecordId 查询集合,就像字典一样。

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2017-12-24
      • 2016-03-12
      • 1970-01-01
      相关资源
      最近更新 更多