MongoDB C#中如何将IndexKeysDefinitionBuilder转为IndexKeysDefinition
问题解决:MongoDB索引创建的类型转换错误
错误原因
你遇到的类型转换错误,核心是传递给CreateIndexModel<T>的参数类型不匹配:
indexBuilder是IndexKeysDefinitionBuilder<T>类型(索引构建器)- 但
CreateIndexModel<T>的第一个参数需要的是IndexKeysDefinition<T>类型(最终的索引定义)
调用indexBuilder.Descending()或Ascending()时,方法会返回正确的IndexKeysDefinition<T>实例,但你没有把这个返回值保存下来,而是直接传递了构建器本身,导致类型不兼容。
修正后的代码
基础写法
var indexBuilder = Builders<T>.IndexKeys; IndexKeysDefinition<T> indexKeys; if (setting.IsDescending) indexKeys = indexBuilder.Descending(setting.Column); else indexKeys = indexBuilder.Ascending(setting.Column); var indexOptions = new CreateIndexOptions(); if (setting.IsUnique) indexOptions.Unique = true; var model = new CreateIndexModel<T>(indexKeys, indexOptions);
简洁写法(用三元表达式+对象初始化器)
var indexBuilder = Builders<T>.IndexKeys; var indexKeys = setting.IsDescending ? indexBuilder.Descending(setting.Column) : indexBuilder.Ascending(setting.Column); var indexOptions = new CreateIndexOptions { Unique = setting.IsUnique }; var model = new CreateIndexModel<T>(indexKeys, indexOptions);
关键说明
IndexKeysDefinitionBuilder<T>是一个工具类,用来逐步构建索引定义;它的所有索引方向方法(Descending/Ascending等)都会返回最终可用的IndexKeysDefinition<T>实例,你需要将这个返回值作为参数传入CreateIndexModel<T>,而不是传递工具类本身。
内容的提问来源于stack exchange,提问作者NewCSharp
相关产品推荐
相关产品推荐

