尝试按枚举值过滤时MongoDb C#驱动程序问题

时间:2017-10-26 18:01:55

标签: c# mongodb enums

我需要一些帮助,我是MongoDb的新手,并使用2.4.4 MongoDb.Driver for .Net。

我已经创建了一个强类型我的集合的类,其中一个字段是枚举,我通过添加BsonRepresentation装饰器使用find时,设法使查询返回字符串而不是该字段上的int。

我当前的问题是在尝试按枚举字段过滤时,我正在尝试执行以下操作:

return await _context.Contacts
    .Find(x=> x.EnumField.ToString().Contains(searchTextParam)).ToListAsync();

这样我就可以按该字段的文本值进行过滤,但这会引发运行时错误:

System.ArgumentException: Unsupported filter: {document}{EnumField}.ToString().Contains("searchValue").

提前致谢, 乔治

1 个答案:

答案 0 :(得分:0)

一般来说,驱动程序中的LINQ集成不支持任何类型的LINQ语句,根据我的经验,在属性上使用.ToString()是不支持的场景之一(即不能支持)由驱动程序解析以转换为MongoDB查询)。

https://stackoverflow.com/a/34033905/159446中汲取灵感,您可能希望做到这样的事情:

// assuming your class is also called Contacts
var filter = Builders<Contacts>.Filter.Regex(x => x.EnumField, 
              BsonRegularExpression.Create(searchTextParam));
return await _context.Contacts
     .Find(filter).ToListAsync();