使用c#和linq查询mongo中的嵌套属性

使用c#和linq查询mongo中的嵌套属性,c#,mongodb,linq,C#,Mongodb,Linq,我尝试使用linq查询来过滤来自Mongo的结果,但使用复杂对象的查询都不起作用: 以下几点效果不错: query.Where(o => (o.Name == "Joe")) 但这给了我错误: query.Where(o => (o.Address.HouseNumber == "1234")) 对于2.1.1版c#驱动程序,如果我使用我得到的旧驱动程序: 无法确定表达式的序列化信息: p、 地址、门牌号 在 MongoDB.Driver.Linq.Utils.bsonSeria

我尝试使用linq查询来过滤来自Mongo的结果,但使用复杂对象的查询都不起作用:

以下几点效果不错:

query.Where(o => (o.Name == "Joe"))
但这给了我错误:

query.Where(o => (o.Address.HouseNumber == "1234"))
对于2.1.1版c#驱动程序,如果我使用我得到的旧驱动程序:

无法确定表达式的序列化信息: p、 地址、门牌号

在 MongoDB.Driver.Linq.Utils.bsonSerializationInfo.GetSerializationInfo(表达式 节点,字典
2序列化信息缓存)位于
MongoDB.Driver.Linq.Utils.BsonSerializationInfoHelper.GetSerializationInfo(表达式
节点)在
MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(表达式
变量表达式,表达式类型运算符类型,常量表达式
恒压)在
MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(BinaryExpression
二进制表达式)在
MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(表达式
表达式)在
MongoDB.Driver.Linq.PredicateTranslator.BuildAndAlsoQuery(二进制表达式
二进制表达式)在
MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(表达式
表达式)位于MongoDB.Driver.Linq.SelectQuery.BuildQuery()处
MongoDB.Driver.Linq.SelectQuery.Execute()位于
MongoDB.Driver.Linq.MongoQueryProvider.Execute(表达式)
位于MongoDB.Driver.Linq.MongoQueryable的
1.GetEnumerator()位于 System.Collections.Generic.List
1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source)at
Core.Persistence.LegacyMongoDb.LegacyMongoDbImp.d_u10
1.MoveNext() 在里面 C:\Users…\src\Core.Persistence.LegacyMongoDb\LegacyMongoDb.Implementation.cs:line 八十四

如果我使用我获得的驱动程序的当前版本:

[地址]。不支持门牌号

在 MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(表达式 表达式)在 MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(表达式 变量表达式,表达式类型运算符类型,常量表达式 恒压)在 MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(二进制表达式 二进制表达式)在 MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(表达式 节点)在 MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(表达式 节点,IBMONSerializerRegistry serializerRegistry)位于 MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateSkip(SkipExpression 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateTake(TakeExpression 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePline(PipelineExpression 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点)在 MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点,IBMONSerializerRegistry serializerRegistry)位于 MongoDB.Driver.Linq.MongoQueryProviderImpl
1.Translate(表达式
表达式)在
MongoDB.Driver.Linq.MongoQueryProviderImpl
1.ExecuteAsync[TResult](表达式 表达式,CancellationToken CancellationToken)位于 MongoDB.Driver.Linq.MongoQueryableImpl
2.ToCursorAsync(CancellationToken
取消令牌)在
MongoDB.Driver.iasyncursorsourceextensions.d_u4
1.MoveNext() ---来自引发异常的上一个位置的堆栈结束跟踪---在 System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()中
位于Core.Persistence.MongoDb.MongoDbImp.d_u12
1.MoveNext() 在里面 C:\Users…\libs\mojio.core\src\core.Persistence.MongoDb\MongoDb.Implementation.cs:line 68

我被困在这里了,如果能在正确的方向上提供帮助,我将不胜感激

编辑:

公共类用户:基本,IUser
{
公共字符串名称{get;set;}
公共地址{get;set;}
}
公开课地址:IAddress
{
公共字符串HouseNumber{get;set;}
公共字符串City{get;set;}
公共字符串国家{get;set;}
}

我正在使用复杂对象测试它,它似乎对我有用。您使用的是什么版本的Mongo C#驱动程序?你能提供关于复杂对象的更多细节吗?可能列出这两个对象的属性会有所帮助。

版本1.1.1.5不起作用,所以我更新到了2.2.3,并且我已经更新了问题,以包括关于对象的详细信息在这种情况下,什么是
query
?{aggregate([])。其中(p=>p.Deleted.Equals(False))。其中(m=>m.Index.Any(guid=>value(Base`1+c\u显示类7\u 0[用户]).index.Contains(guid)).Where(o=>(o.Address.HouseNumber==“1234”)},这是用于代码中在同一点上工作的:聚合([{$match:{“Deleted”:false},{“$match”:{uUuid:{uUuid:{uUuid:{uUuid:[00000000-0000-0000-0000-0000-000000”)、CSUUID(“00000000-0000-0000-0000-0000-000000”)、CSUUID(00000000-0000-0000-0000-0000-000000000000)]}},{“$match”:{“Name”:“Jerry”}}}}
public class User : Base<User>, IUser
{
     public string Name { get; set; }
     public IAddress Address { get; set; }
}


public class Address : IAddress
{
     public string HouseNumber { get; set; }
     public string City { get; set; }
     public string Country { get; set; }

}