我是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的行。
有什么想法吗?
感谢。
答案 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时会得到什么?