2

我正在尝试更新或插入(如果它不存在)数据库中的一个元素,但到目前为止,我还没有找到任何关于如何使用C# ApiUpdateFilter提供的示例。(C# Api,而不是 RethinkDB Reql)。

链接到 api:https ://github.com/bchavez/RethinkDb.Driver

谁能帮我 ?

POCO

 class Player
    {

        public long playerId { get; set; }
        public long groupId { get; set; }
        public int type { get; set; }


        public double lat { get; set; }
        public double lng { get; set; }
    }

class PlayerRequest
    {

        public  Player data { get; set; }
        public  Auxdata aux { get; set; }
    }

这将是插入请求:

dynamic rez = await r.Db(Constants.DB_NAME).Table(Constants.TABLE_CLIENT)
              .Insert(playerRequest.data).RunAsync(Con);

如果不存在,我需要playerRequest.data根据playerId 或插入更新。Player

我已经搜索了 Api,但到目前为止还没有成功。

PS我已经尝试安装 Linq to ReQL 扩展,但方法接缝不可用。

4

1 回答 1

0

在搜索并询问了对我有很大帮助的驱动程序的作者(谢谢布莱恩!)之后,解决方案如下:

在 Js 中,我们定义 adhoc 对象{prop1:value1,prop2,value2}

C# 等价物使用匿名类型:new{prop1:value1,prop2:value2}

r.Db(Constants.DB_NAME).Table(Constants.CLIENT_TABLE)
                        .Filter(new { playerId = playerRequest.data.playerId })
                        .Update(new { lng = playerRequest.data.lng, lat = playerRequest.data.lat })
                        .RunResult<QueryResult>(this.Con);

此外,为了进一步解释,您必须阅读 github 存储库 wiki 的这一部分: https ://github.com/bchavez/RethinkDb.Driver/wiki/Extra-C%23-Driver-Features

如果对如何使用方法有疑问,请检查 Java 驱动程序的实现,它们是相似的(C# 驱动程序扩展了 Java 驱动程序)

于 2018-07-31T19:51:33.000 回答