Hi guys, after upgrading MongoDB.Driver.GridFS from 2.9.2 to 2.22. I started seeing an exception:
MongoDB.Driver.Linq.ExpressionNotSupportedException : Expression not supported: Convert(x.SomeType).
....
--ExpressionNotSupportedException
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToFilterTranslators.ToFilterFieldTranslators.ConvertExpressionToFilterFieldTranslator.Translate(TranslationContext context, UnaryExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToFilterTranslators.ToFilterFieldTranslators.ConvertExpressionToFilterFieldTranslator.Translate(TranslationContext context, UnaryExpression expression)
at MongoDB.Driver.Linq.Linq3Implementation.LinqProviderAdapterV3.TranslateExpressionToField[TDocument,TField](Expression`1 expression, IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, Boolean allowScalarValueForArrayField)
at MongoDB.Driver.SingleItemAsArrayOperatorFilterDefinition`2.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
at MongoDB.Driver.AndFilterDefinition`1.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
at MongoDB.Driver.AndFilterDefinition`1.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider)
at MongoDB.Driver.MongoCollectionImpl`1.CreateCountDocumentsOperation(FilterDefinition`1 filter, CountOptions options)
at MongoDB.Driver.MongoCollectionImpl`1.CountDocumentsAsync(IClientSessionHandle session, FilterDefinition`1 filter, CountOptions options, CancellationToken cancellationToken)
at MongoDB.Driver.MongoCollectionImpl`1.<>c__DisplayClass40_0.<CountDocumentsAsync>b__0(IClientSessionHandle session)
at MongoDB.Driver.MongoCollectionImpl`1.<UsingImplicitSessionAsync>d__109`1.MoveNext()
The reason is a conversion from a Nullable to Enum.
Example of Data:
public class TestDocument
{
[BsonId]
public Guid Id {get;set;}
[JsonProperty(Required = Required.AllowNull)]
public MyEnum? SomeType{ get;set; }
}
public class SomeFilter
{
public MyEnum SomeType{ get;set; }
}
public DAL
{
public Get(Filter options)
{
FilterDefinitionBuilder<TestDocument> filterBuilder = Builders<TestDocument>.Filter;
FilterDefinition<TestDocument> filter = filterBuilder.And(filter, filterBuilder.In(x => (MyEnum)x.SomeType, options.SomeType));
IMongoCollection<TestDocument> collection = _databaseR.GetCollection<TestDocument>(CollectionName);
IFindFluent<TestDocument, TestDocument> resultFind = collection.Find(filter ?? Builders<TestDocument>.Filter.Empty,
new FindOptions
{
Collation = new Collation("en_US", caseLevel: false, strength: CollationStrength.Secondary),
});
var result = new RecordsStorage<BusinessEntity>
{
TotalRecords = await resultFind.CountDocumentsAsync(cancellationToken),
Records = (await resultFind.ToListAsync(cancellationToken))
.Cast<BusinessEntity>()
.ToList(),
};
}
If I change LinqProvider = MongoDB.Driver.Linq.LinqProvider.V2 - it works as a charm.