如何从postgres获取文本数组数据到c#

How to gets text array data from postgres to c#

我已经从 postgres 调用了函数,输出是这样的

我正在使用 windows 表单来显示数据,我使用 npgsql 连接 c# 和 postgres d.b。 我的 BL class 函数如下

    public List<User> view_data()
    {

        NpgsqlDataReader rdr;
        List<User> lstUser = new List<User>();

        if (con.State == ConnectionState.Closed)
        {
            con.Open();
        }
        NpgsqlCommand command = new NpgsqlCommand("select * from public.get_user_details", con);

        rdr = command.ExecuteReader();

        while (rdr.Read())
        {
           
            lstUser.Add(new User()
            {
                id = rdr.GetInt16(Convert.ToString(rdr["id"])),
                roleName = rdr.GetString(Convert.ToString(rdr["rolename"])),
                firstName = rdr.GetString(rdr.GetOrdinal("firstname")),
                lastName = rdr.GetString(rdr.GetOrdinal("lastname"))
       
        });

        }
        rdr.Close();

        return lstUser;

    }

获取角色名错误。错误是无法将字符串转换为字符串[]

我的用户class如下

public class User
{
    public int id
    { get; set; }
    public string firstName
    { get; set; }
    public string lastName
    { get; set; }
    public string email
    { get; set; }
    public string userName
    { get; set; }
    public string[] roleName
    { get; set; }

}

我的问题是如何使用 npqsql 数据在 c# 中分配文本数组数据 reader?

在此区域出现错误 => roleName = rdr.GetString(Convert.ToString(rdr["rolename"]))

postgres 给出的角色名称输出是文本数组。 IE;一列中包含多个值。 IE; {管理员,用户}。因此需要使用数据 reader.

将 postgres 文本数组设置为 c# 格式

保持您的代码不变,但将 SQL 查询替换为下面的查询。它将 roleName 数组的内容连接(聚合)到一个逗号分隔的列表字符串中。所以而不是

select * from public.get_user_details

使用这个:

select 
  id,
  firstname,
  lastname,
  array_to_string(rolename, ',') as rolename
from public.get_user_details

为了便于阅读,我添加了新行,您可以删除它们。顺便说一下,生产代码中的 select * 通常会带来麻烦。