1

ソファベースのデータ バケットに「TotalPosts」という名前のビューがあります。設計ドキュメント名は「Statistics」です。

これは私のコードです。ここで接続を確立しています..

protected void Page_Load(object sender, EventArgs e)
        {
            try
              {
                var client= new CouchbaseClient();
                Tasks objTasks = new Tasks();
        foreach (Newtonsoft.Json.Linq.JToken jt in objTasks.GetAllStatistics())
        {
            if (jt["key"].ToString() == "Total")
            {
                dt.Rows[0]["Value"] = jt["value"].ToString();
            }
            if (jt["key"].ToString() == "Open")
            {
                dt.Rows[1]["Value"] = jt["value"].ToString();
            }
            if (jt["key"].ToString() == "Wah")
            {
                dt.Rows[2]["Value"] = jt["value"].ToString();
            }

        }

これは私の GetAllStatistics 関数定義コードです:

public IEnumerable<Newtonsoft.Json.Linq.JToken> GetAllStatistics()
        {

            var results = oCouchbase.GetView("Statistics", "TotalPosts");
            return results;// I am getting the following error in this line
        }

タイプ 'Couchbase.IView' を 'System.Collections.Generic.IEnumerable' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?)

これは私のマップコードです:

function(doc) {
emit("Total", 1);
    emit("TotalParticipants", doc.participants.length);
    if(doc.status == "1"){
        emit("Open", 1);
    } else if(doc.status == "2") {
        emit("Wah", parseInt(doc.wah_points));
    }
}

これは私の削減コードです:

function (key, values, rereduce) {
    return sum(values);
}

適切な型キャストが見つかりませんでした。この問題で私を助けてください

4

2 に答える 2

0

非ジェネリックバージョンのGetViewは、IViewRowの列挙可能なリストを返します。したがって、代わりに、GetAllStatisticsメソッドを次のようなものに変更することをお勧めします。

public IEnumerable<Newtonsoft.Json.Linq.JToken> GetAllStatistics()
{
    var results = oCouchbase.GetView("Statistics", "TotalPosts");
    foreach(var row in results)
    {
        yield return oCouchbase.Get<Newtonsoft.Json.Linq.JToken>(row.ItemId);
    }
}

そうすれば、foreachループはそのまま機能するはずです。しかし、私が持っている質問は、あなたの文書がどのように見えるかです。ストア操作の値としてJTokenインスタンスをシリアル化していますか?使用している場合、ビュー内で使用できるのは有効なJSON文字列のみであるため、ビューでは使用できません。私が今述べたことについて質問がある場合は、ストアの操作とマップ/リデュースビューコードを含めるように質問を編集してください。

于 2012-09-10T22:13:39.717 に答える
0

Couchbaseの知識を主張することはできませんが、エラーメッセージは、明示的なキャストを実行できることを示しています。帰りのキャストをやってみたことがありますか?

return (Newtonsoft.Json.Linq.JToken)results;
于 2012-09-10T12:53:15.503 に答える