如何使用FluentCassandra进行查询

时间:2013-01-24 18:21:11

标签: composite fluentcassandra

我是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 stantement看到的一样。

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

我如何应用类似以下内容的过滤器:

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);

在此之后我获得了“users”DataSet对象中的所有信息。

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

有人可以提供帮助吗?

感谢。


嗯,我做了:

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

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

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

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

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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时会得到什么?