【问题标题】:Type casting error while using couchbase使用 couchbase 时出现类型转换错误
【发布时间】:2012-09-03 08:05:06
【问题描述】:

我的 couchbase 数据桶中有一个名为“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);
}

我找不到合适的类型转换。请在这个问题上帮助我

【问题讨论】:

    标签: c# types casting error-handling couchbase


    【解决方案1】:

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

    return (Newtonsoft.Json.Linq.JToken)results;
    

    【讨论】:

      【解决方案2】:

      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 视图代码。

      【讨论】:

      • 我已经包含了 map 和 reduce 代码。请检查一下。我已经尝试了你上面提到的方式,但它抛出了一个异常“对象引用未设置为对象的实例。”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2021-05-16
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      相关资源
      最近更新 更多