1

私は Cassandra と FluentCassandra (C#.NET) も初めてです。私は、Microsoft SQL のような RDBMS (リレーショナル データベース) の重い概念を持っています。

うーん...単純なコードをいくつか実行できましたが、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 ですが、結果は 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);

この後、「ユーザー」DataSetオブジェクトにすべての情報がありました。

FluentCassandraを使用してCassandraデータベースで同じ操作を実行したいのですが、少し(まあ、かなり)迷っています。これを探すのに多くの時間を費やしましたが、成功しませんでした。ドキュメントと例は貧弱です...

誰か助けてください。

ありがとう。


さて、私はしました:

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

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

そして、私はリターンを持っていますが、返されるのはキー列だけで、他の列はそうではありません。

選択を行う他の方法を試しましたが、すべて同じ結果になりました。行のキーのみを持つ行だけです。

何か案が?

ありがとう。

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

すべての取得がキー列であり、他に奇妙なことは何もない場合。列ファミリーに実際に期待する列が含まれていることを確認しましたか?Cassandra CLIを使用してCFにクエリを実行すると、何が得られますか?

于 2013-02-05T10:50:27.307 に答える
0

並べ替えられた列セット内の連続した範囲にない限り、列ファミリーから 1 つのクエリで選択した数の列だけを読み取ることは可能ですか?

于 2013-01-26T21:54:52.717 に答える