【问题标题】:C# datatable from Dictionary来自字典的 C# 数据表
【发布时间】:2018-01-29 10:55:37
【问题描述】:

我有以下字典:

Dictionary messages = new Dictionary<int, dictionary<string, List<string>>>();

我需要以某种方式将此字典的内容放入数据网格视图中。 DGV 应该有 3 列: ID、消息和标签。 ID 是消息的 ID 号(整数)。 消息就是消息(字符串)。 标签列表是链接到此消息的任何标签,可能有 1 到 6 个不同的标签。

字典由 SQL 查询的结果组成。 我想这样做,以删除重复的消息。 SQL 表是根据这个问题中接受的答案制作的: Building a relation between tables

或者我的想法可能完全错误?我可以使用 SQL 查询来实现我想要的吗?

我希望实现的是: 从查询中获取结果显示为:

| ID | Message1 | Tag1, tag2, tag3, tag4 |
| ID | Message2 | Tag1, tag2, tag3, tag4 |
| ID | Message3 | Tag1, tag2, tag3, tag4 |

而不是现在呈现的:

| ID | Message1 | Tag1 |
| ID | Message1 | Tag2 |
| ID | Message1 | Tag3 |
| ID | Message2 | Tag1 |
| ID | Message2 | Tag2 |
| ID | Message2 | Tag3 |

我现在使用的查询是:

SELECT t.message_ID, m.message, t.tagName FROM tbl_messages m JOIN tbl_messages_x_tbl_tags t ON m.message_ID = t.message_ID WHERE t.tagName='tag1' OR t.tagName='tag2'

【问题讨论】:

  • 你是在使用 dapper 这样的 ORM 来查询数据库吗? github.com/StackExchange/Dapper 还有为什么是字典而不是对象列表?
  • 如果您想以简单的行显示数据,而不是父/子关系,那么可以,只需选择简单行中的数据并相应地设置 DataSource。
  • @Rickard 请查看此答案:stackoverflow.com/questions/48310505/…
  • @AlexanderI。我会感谢你! :)
  • 我已经找了一段时间了,Alexander,但不幸的是我不太明白。我不了解 SQL 查询,尝试使用 LINQ 方法似乎无法获得所需的输出。要么我的查询错误(与描述的相同),要么代码不起作用。我认为代码太多,无法添加到评论中。不知道如何以一种好的方式显示我正在使用的代码..

标签: c# mysql winforms


【解决方案1】:

这是您可以从数据中构建行/列列表的方法:

messages.SelectMany(outer => outer.Value.Select(inner => new
{
   Column1 = outer.Key,
   Column2 = inner.Key,
   Column3 = string.Join(", ", inner.Value) 
}); 

我不知道你的 datagridview 长什么样。

【讨论】:

  • 到目前为止,我的数据网格只是 UI 中添加的 dgv,绑定到以下 SQL 查询的输出:SELECT message_ID, message FROM tbl_messages
  • 我试过了,将其声明为 var,然后将其作为数据源添加到 DGV 中,没有任何结果。 ://
【解决方案2】:

以下是类似的工作方式:

您需要先导入 system.linq。

        System.Data.DataTable tbl = new System.Data.DataTable();
        tbl.Columns.Add("ID", typeof(Int32));
        tbl.Columns.Add("Message", typeof(String));
        tbl.Columns.Add("Tags", typeof(String));


        foreach (var kvp1 in messages)
        {
            foreach (var kvp2 in kvp1.Value)
            {

                tbl.Rows.Add(kvp1.Key, kvp2.Key, String.Join(", ", kvp2.Value.ToArray()));

            }
        }

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 1970-01-01
    • 2018-11-17
    • 2021-09-03
    • 2018-05-04
    • 2022-08-05
    • 2011-07-30
    • 2020-04-16
    相关资源
    最近更新 更多