Повторять "задачу" "в c#? - PullRequest
2 голосов
/ 07 мая 2020

Я играю с Scylla db и работаю с C# впервые за 15 лет.

Прочитав о Scylla и C# в течение нескольких дней, я получил код ниже. В приведенном ниже коде я подключаюсь к кластеру scylla и пытаюсь запросить таблицу, чтобы получить из нее данные.

public static async void test()
{
    var cluster = Cluster.Builder().AddContactPoints("test-endpoint").WithQueryOptions(new QueryOptions().SetConsistencyLevel(ConsistencyLevel.LocalQuorum)).Build();
    var session = cluster.Connect("processks");
    var mapper = new Mapper(session);

    var cql = Cql.New("SELECT * FROM test LIMIT 10");
    var fetchResult = await mapper.FetchAsync<User>(cql).ConfigureAwait(false);
    // this just prints the object which is not what I want
    Console.WriteLine(fetchResult);
}

Ниже мой User класс:

using System.Collections.Generic;
using Cassandra.Mapping;
using Cassandra.Mapping.Attributes;

namespace Test.Objects.POCO.Scylla
{
    [TableName("test")]
    [PrimaryKey("client_id")]
    public class User
    {
        [Column("client_id")]
        public int ClientId { get; set; }

        [Column("md")]
        public string MD { get; set; }

        [Column("process_ids")]
        public List<int> ProcessIds { get; set; }
    }
}

Как Могу ли я выполнить итерацию объекта fetchResult, чтобы распечатать данные, которые я получил после выполнения вышеуказанного запроса?

Это код ссылка класса Mapper, где определен метод FetchAsync и возвращает Task<IEnumerable<T>> объект обратно.

1 Ответ

3 голосов
/ 07 мая 2020
var fetchResult = await mapper.FetchAsync<User>(cql).ConfigureAwait(false);

fetchResult будет IEnumerable<User>, поэтому вам нужно перебирать IEnumerable, как бы вы ни хотели, и печатать базовые объекты User любым способом, который вы предпочитаете.

Console.WriteLine печатает результат предоставленного метода ToString() объекта, и ни возвращенный объект IEnumerable, ни содержащиеся в нем User объекты не имеют реализации по умолчанию, которую вы ищете.

Вы можете реализовать ToString() в классе User и сделать что-то вроде этого:

Console.WriteLine(string.Join(Environment.NewLine, fetchResult));

Или вы можете просто использовать библиотеку JSON для преобразования пользовательского объекта в JSON строка вместо замены ToString():

Console.WriteLine(string.Join(
    Environment.NewLine, 
    fetchResult.Select(user => JsonConvert.SerializeObject(user))))

[РЕДАКТИРОВАТЬ] вас могут заинтересовать наши примеры и документы:

https://www.datastax.com/examples (можно фильтровать по C# языку)

https://docs.datastax.com/en/developer/csharp-driver/3.14/features/components/mapper/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...