1

我也是 Cassandra 和 FluentCassandra (C#.NET) 的新手。我对 RDBMS(关系数据库)有很重的概念,比如 Microsoft SQL。

嗯......我能够做一些简单的代码,但是,这远远不是我在 RDBMS 中咨询 ADO.NET 时所做的。

我做了什么:

var context = new CassandraContext(keyspace: "keyspace", host: "ipAddress"))

var columnFamily = context.GetColumnFamily("Test");

var record = records.Get("joao").FirstOrDefault();

foreach (FluentColumn colunm in record.Columns)
{
    Console.WriteLine("{0}", colunm.ColumnValue);
}

好吧,我有键“joao”的行是一个 CompositeColumn,但结果是作为线性序列 os 列给我的,就像你在 foreach 语句中看到的那样。

好吧,现在你知道了这一切,我可以揭露我的疑问:

我如何应用过滤器,例如:

select Name, Birthday, Age, MiddleName, LastnName,
from Test
where Key = 'joao'
and Age > 18

我不知道如何使用 FluentCassandra。我可以使用 .Get() 方法来做到这一点吗?如果是,如何?记住我有复合列,我也不知道如何在 FluentCassandra 中使用它们......

例如,如果我使用 ADO.NET,我只需执行以下操作:

SqlConnection connection = new SqlConnection("connectrion string");
string query = "select Name, Birthday, Age, MiddleName, LastnName, from Test where Key = 'joao' and Age > 18";
SqlDataAdapter adapter = new SqlDataAdpter(connection, query);
Dataset users = new datSet();
adapter.Fill(users);

在此之后,我在“用户”数据集对象中获得了所有信息。

我真的很想使用 FluentCassandra 在 Cassandra 数据库上执行相同的操作,但我有点(嗯,很多)迷失了。我花了很多时间寻找这个,但没有成功,文档和示例很差......

请问有人可以帮忙吗?

谢谢。


好吧,我做到了:

var context = new CassandraContext(keyspace: "KeySpace", host: "IpAddress");

var results = context.ExecuteQuery("select * from Test");

我有回报,但返回的只是 KEY 列,其他列没有。

我尝试了其他方法来进行选择,但所有方法都具有相同的结果:只有行的 KEY 行。

任何想法?

谢谢。

4

2 回答 2

0

executeQuery 将返回一个 IcqlRow 实体列表。从那里你应该能够遍历每一行中的列。

这是我用来将 CqlRow 转换为已知对象的方法:

var rows = db.ExecuteQuery(cql).ToList();
var entities = rows.Select(row => ToEntity(row)).ToList();

function DataEntity ToEntity(ICqlRow row)
{
    var obj = new DataEntity();
    foreach (var col in row.Columns)
    {
        var info = data.GetType().GetProperty(col.ColumnName.GetValue<string>());
        if (col.ColumnValue != null)
            info.SetValue(data, col.ColumnValue.GetValue(info.PropertyType), null);
    }
    return obj;
}

如果您得到的只是 Key 列,而没有其他奇怪的东西。您是否确认列族确实包含您期望的列?使用 Cassandra CLI 查询 CF 时会得到什么?

于 2013-02-05T10:50:27.307 回答
0

是否可以使用列族中的一个查询仅读取选定数量的列,除非它们位于已排序列集中的连续范围内?

于 2013-01-26T21:54:52.717 回答