首页 > 解决方案 > 使用 Datastax C# Driver 3.6 查询 cassandra 时使用 Enum

问题描述

我目前正在尝试使用 C# Datastax cassandra 驱动程序(3.6)将一些 MongoDB 切换到 Cassandra,使用 LINQ 表达式使用表对象映射构建查询:

For<SomeClass>()
 .TableName(path)
...
 .Column(x => x.DataProvider, x => x.WithName("dp").WithDbType<Int32>().WithSecondaryIndex())
...

事情是 - 一些字段是枚举(映射到 Int32) - 虽然我设法使用自定义 TypeConverter 将它们写入数据库,但由于驱动程序的序列化程序,我在将它们用作查询参数时遇到了问题。

var mapping = new CassandraDBMapping(path);
var table = new Table<T>(session, new MappingConfiguration()
                .ConvertTypesUsing(new CassandraTypeConverter())
                .Define(mapping));
return table.Where(predicate).AllowFiltering().ExecuteAsync();

这可以通过创建一个 Enum 序列化程序并将其添加到驱动程序的序列化程序列表中来解决,但是,我正在寻找一个不修改驱动程序本身的解决方案。

标签: c#linqcassandradatastax

解决方案


我相信这是在https://datastax-oss.atlassian.net/browse/CSHARP-938中捕获的相同问题

int用户报告说,在驱动程序的 LINQ 组件支持此问题之前,将值显式转换为查询表达式是解决此问题的方法。


推荐阅读