使用c#和linq查询mongo中的嵌套属性
我尝试使用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
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.List1..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.MongoQueryProviderImpl1.Translate(表达式
表达式)在
MongoDB.Driver.Linq.MongoQueryProviderImpl
1.ExecuteAsync[TResult](表达式
表达式,CancellationToken CancellationToken)位于
MongoDB.Driver.Linq.MongoQueryableImpl2.ToCursorAsync(CancellationToken
取消令牌)在
MongoDB.Driver.iasyncursorsourceextensions.d_u4
1.MoveNext()
---来自引发异常的上一个位置的堆栈结束跟踪---在
System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务
任务)在
System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务
任务)在System.Runtime.CompilerServices.TaskAwaiter1.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; }
}