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 实例序列化为 Store 操作中的值?如果您是,那么它们将在您的视图中不可用,因为只有有效的 JSON 字符串才能在视图中使用。如果您对我刚才提到的任何内容有任何疑问,请随时编辑您的问题以包括您的 Store 操作和 map/reduce 视图代码。

于 2012-09-10T22:13:39.717 回答
0

我不能声称对 Couchbase 有任何了解,但错误消息表明您可以执行显式转换。您是否尝试过为您的回归做演员?

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