在c中迭代“task< ienumerable< t>>”?

laawzig2  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(375)

15年来,我第一次与锡拉db合作。
读了几天关于锡拉和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>> 把东西拿回来。

xzv2uavs

xzv2uavs1#

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/

相关问题