Details
-
Bug
-
Resolution: Done
-
Major - P3
-
None
-
2.2.4
-
windows
Description
With this query handler
public class AppointmentsFromDateToDateQuery : IQuery<IEnumerable<Appointment>> |
{
|
public DateTimeOffset From |
{ get; set; } |
public DateTimeOffset To { get; set; } |
}
|
public class AppointmentsFromDateToDateQueryHandler : IQueryHandlerAsync<AppointmentsFromDateToDateQuery, IEnumerable<Appointment>> |
{
|
private IMongoDatabase _db; |
public AppointmentsFromDateToDateQueryHandler(IMongoDatabase db) |
{ _db = db; }
|
public async Task<IEnumerable<Appointment>> HandleAsync(AppointmentsFromDateToDateQuery query) |
{ return await _db.GetCollection<Appointment>(typeof(Appointment).Name) .Find(a => a.Starts >= query.From && a.Ends <= query.To) .SortBy(a => a.Starts) .ToListAsync(); } |
and this usage |
var query = new AppointmentsFromDateToDateQuery() |
{ From = date.Value, To = date.Value.AddDays(1) }
|
;
|
var items = await new AppointmentsFromDateToDateQueryHandler(_db).HandleAsync(query); |
the driver would throw an exception
[InvalidCastException: Object must implement IConvertible.]
|
System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) +14092601
|
MongoDB.Driver.Linq.Expressions.ISerializationExpressionExtensions.ConvertIfNecessary(Type targetType, Object value) +149
|
MongoDB.Driver.Linq.Expressions.ISerializationExpressionExtensions.SerializeValue(ISerializationExpression field, Object value) +112
|
MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression) +283
|
MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node) +461
|
MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateAndAlso(BinaryExpression node) +82
|
MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node) +283
|
MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry) +76
|
MongoDB.Driver.MongoCollectionImpl`1.CreateFindOperation(FilterDefinition`1 filter, FindOptions`2 options) +358
|
MongoDB.Driver.MongoCollectionImpl`1.FindAsync(FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken) +174
|
MongoDB.Driver.FindFluent`2.ToCursorAsync(CancellationToken cancellationToken) +125
|
MongoDB.Driver.<ToListAsync>d__16`1.MoveNext() +134
|
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13891908
|
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
|
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +31
|
Roswell.Plugins.Customers.Queries.<HandleAsync>d__2.MoveNext() +2923
|
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +13891908
|
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +61
|
System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() +31
|
Only and only when the collection in question would be empty.
The problem actually lies in the return type of IEnumerable which the driver apparently has a trouble of instantiating.
This is something that normally works with Entity Framework (returning empty IEnumerables).