我正在玩Scylla db,并且15年来第一次使用C#。
几天以来,在阅读了有关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
类的代码link,其中定义了FetchAsync
方法,并返回了Task<IEnumerable<T>>
对象。
答案 0 :(得分:3)
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))))
[EDIT] ,您可能对我们的示例和文档感兴趣:
https://www.datastax.com/examples(您可以按C#语言进行过滤)
https://docs.datastax.com/en/developer/csharp-driver/3.14/features/components/mapper/