Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用.Date确定*expression*的序列化信息_C#_Mongodb_Datetime_Mongodb .net Driver - Fatal编程技术网

C# 无法使用.Date确定*expression*的序列化信息

C# 无法使用.Date确定*expression*的序列化信息,c#,mongodb,datetime,mongodb-.net-driver,C#,Mongodb,Datetime,Mongodb .net Driver,我正在尝试读取带有日期筛选器的mongoDB集合(只应忽略日期和时间): 尝试.FindAsync()时,代码抛出一个InvalidOperationException: 中发生“System.InvalidOperationException”类型的异常 MongoDB.Driver.dll,但未在用户代码中处理 信息:无法确定p的序列化信息 =>p.SomeDateTimeProperty.Date 如果我删除过滤器中的.Date部分(p.SomeDateTimeProperty.Date、

我正在尝试读取带有日期筛选器的mongoDB集合(只应忽略日期和时间):

尝试
.FindAsync()
时,代码抛出一个
InvalidOperationException

中发生“System.InvalidOperationException”类型的异常 MongoDB.Driver.dll,但未在用户代码中处理 信息:无法确定p的序列化信息 =>p.SomeDateTimeProperty.Date

如果我删除过滤器中的.Date部分(p.SomeDateTimeProperty.Date、DateTime.Now.Date),一切都可以正常工作,但是我需要一个yyyy\mm\dd比较,而不考虑hh\mm

Stacktrace说:

at MongoDB.Driver.ExpressionFieldDefinition`2.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.SimpleFilterDefinition`2.Render(IBsonSerializer`1 documentSerializer, IBsonSerializerRegistry serializerRegistry)
at MongoDB.Driver.MongoCollectionImpl`1.CreateFindOperation[TProjection](FilterDefinition`1 filter, FindOptions`2 options)
at MongoDB.Driver.MongoCollectionImpl`1.FindAsync[TProjection](FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken)
at MongoDB.Driver.IMongoCollectionExtensions.FindAsync[TDocument](IMongoCollection`1 collection, FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken)
at [...]

可能是什么问题?

驱动程序不知道如何在两个日期之间序列化Eq表达式

尝试对两个日期部分执行ToString():

var filterDefinition = Builders<SomeClass>.Filter.Eq(p => p.SomeDateTimeProperty.Date.ToString(), DateTime.Now.Date.ToString());

您是否考虑过使用between子句来使用Lt和Gt运算符

 var b = Builders<SomeClass>.Filter;
 var date = DateTime.UtcNow.Date;
 var filter = b.And(
        b.Gte(x => x.SomeDateTimeProperty, date), 
        b.Lt(x => x.SomeDateTimeProperty, date.AddDays(1))
        );
 ...
var b=Builders.Filter;
var date=DateTime.UtcNow.date;
var过滤器=b.和(
b、 Gte(x=>x.SomeDateTimeProperty,日期),
b、 Lt(x=>x.SomeDateTimeProperty,date.AddDays(1))
);
...

尝试了第一个,我得到了同样的InvalidOperation异常。对于第二个,我仍然得到:“类型为”System.InvalidOperationException“的异常发生在MongoDB.Driver.dll中,但未在用户代码中处理。其他信息:{document}{SomeDateTimeProperty}.Date.ToString()不受支持'您是否在没有.Date部分的情况下尝试过它?是的,删除.Date部分可以防止出现异常,我将此澄清添加到问题中-谢谢!是的,这是我目前采用的解决方案,效果很好,是一个很好且清晰的解决方案。然而,我很好奇为什么第一种方法不起作用……我认为是因为.Date是DateTime上的一个c#函数,当您尝试将其应用于MongoDb模型属性上的属性时,MongoDb驱动程序无法解释它。在使用MongoDb c#驱动程序时,尤其是在使用Linq时,您会发现很多这样的情况
var filterDefinition = Builders<SomeClass>.Filter.Eq(p => p.SomeDateTimeProperty.Date.ToString(), DateTime.Now.Date.ToString());
var date = DateTime.Now.Date.ToString();    
var docs = _someCollection.asQueryable().Where(p => p.SomeDateTimeProperty.Date.ToString() == date);
 var b = Builders<SomeClass>.Filter;
 var date = DateTime.UtcNow.Date;
 var filter = b.And(
        b.Gte(x => x.SomeDateTimeProperty, date), 
        b.Lt(x => x.SomeDateTimeProperty, date.AddDays(1))
        );
 ...