C#
Добавим код в файл Program.cs
using Newtonsoft.Json;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
static class UtilsPostgres
{
public static NpgsqlConnection Connect(string connectionString)
{
NpgsqlConnection conn = new NpgsqlConnection(connectionString);
try
{
conn.Open();
}
catch (Exception e)
{
throw new Exception("Error connecting to the database", e);
}
return conn;
}
public static async Task ExecuteSelectAsJson(NpgsqlConnection conn, string sql, Action<string> callback)
{
try
{
using (var command = conn.CreateCommand())
{
command.CommandText = sql;
var result = await command.ExecuteScalarAsync();
if (result is string json)
{
callback(json);
}
}
}
catch (Exception e)
{
}
}
}
public class City
{
public int CityId { get; set; }
public string CityName { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
// connect
string connectionString = "Server=localhost; Port=5432; Database=postgres; UserId=postgres; Password=evgen12345; commandTimeout=120;";
var conn = UtilsPostgres.Connect(connectionString);
// getting data
string sql = $@"
SELECT json_agg(row_to_json(cities))
FROM
(
SELECT
id AS CityId,
name AS CityName
FROM city
) AS cities;
";
await UtilsPostgres.ExecuteSelectAsJson(conn, sql, json => {
// show json
Console.WriteLine(json);
// convert json to list
var cities = JsonConvert.DeserializeObject<List<City>>(json);
// show list
foreach (var item in cities)
{
Console.WriteLine($"{item.CityId} {item.CityName}");
}
});
Console.ReadLine();
}
}
}
string connectionString = "Server=localhost; Port=5432; Database=postgres; UserId=postgres; Password=evgen12345; commandTimeout=120;";
C#
Добавим код в файл Program.cs
using Newtonsoft.Json;
using Npgsql;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
static class UtilsPostgres
{
public static NpgsqlConnection Connect(string connectionString)
{
NpgsqlConnection conn = new NpgsqlConnection(connectionString);
try
{
conn.Open();
}
catch (Exception e)
{
throw new Exception("Error connecting to the database", e);
}
return conn;
}
public static async Task ExecuteSelectAsJson(NpgsqlConnection conn, string sql, Action<string> callback)
{
try
{
using (var command = conn.CreateCommand())
{
command.CommandText = sql;
var result = await command.ExecuteScalarAsync();
if (result is string json)
{
callback(json);
}
}
}
catch (Exception e)
{
}
}
}
public class Person
{
public int PersonId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class City
{
public int CityId { get; set; }
public string CityName { get; set; }
public List<Person> Persons { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
// connect
string connectionString = "Server=localhost; Port=5432; Database=postgres; UserId=postgres; Password=evgen12345; commandTimeout=120;";
var conn = UtilsPostgres.Connect(connectionString);
// getting data
string sql = $@"
SELECT json_agg(row_to_json(aaa))
FROM
(
SELECT
id AS CityId,
name AS CityName,
(
SELECT json_agg(row_to_json(bbb))
FROM
(
SELECT
id AS PersonId,
first_name AS FirstName,
last_name AS LastName
FROM person
WHERE person.city_id=city.id
) AS bbb
) AS Persons
FROM city
) AS aaa;
";
await UtilsPostgres.ExecuteSelectAsJson(conn, sql, json => {
// show json
Console.WriteLine(json);
// convert jsobn to list
var cities = JsonConvert.DeserializeObject<List<City>>(json);
// show list
foreach (var item in cities)
{
Console.WriteLine($"{item.CityId} {item.CityName}");
}
});
Console.ReadLine();
}
}
}