我正在尝试使用linq查询来过滤Mongo的结果,但我使用复杂对象的查询都不起作用:
以下工作正常:
query.Where(o => (o.Name == "Joe"))
但这给了我错误:
query.Where(o => (o.Address.HouseNumber == "1234"))
对于c#驱动程序的2.1.1版,如果我使用旧版驱动程序,我会得到:
无法确定表达式的序列化信息: p.Address.HouseNumber
在 MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(表达式 node,Dictionary
2 serializationInfoCache) at MongoDB.Driver.Linq.Utils.BsonSerializationInfoHelper.GetSerializationInfo(Expression node) at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression) at MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(BinaryExpression binaryExpression) at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression) at MongoDB.Driver.Linq.PredicateTranslator.BuildAndAlsoQuery(BinaryExpression binaryExpression) at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression) at MongoDB.Driver.Linq.SelectQuery.BuildQuery() at MongoDB.Driver.Linq.SelectQuery.Execute() at MongoDB.Driver.Linq.MongoQueryProvider.Execute(Expression expression) at MongoDB.Driver.Linq.MongoQueryable
1.GetEnumerator()at System.Collections.Generic.List1..ctor(IEnumerable
1集合)
at System.Linq.Enumerable.ToList [TSource](IEnumerable1 source) at Core.Persistence.LegacyMongoDb.LegacyMongoDbImp.<QueryAsync>d__10
1.MoveNext() 在 C:\用户\ SRC \ Core.Persistence.LegacyMongoDb \ LegacyMongoDb.Implementation.cs:行 84
如果我使用当前版本的驱动程序,我会:
[地址]。不支持.HouseNumber。
在 MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(表达式 表达)at MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(表达式 variableExpression,ExpressionType operatorType,ConstantExpression constantExpression) MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(BinaryExpression binaryExpression)at MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(表达式 节点) MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(表达式 node,IBsonSerializerRegistry serializerRegistry)at 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.TranslatePipeline(PipelineExpression 节点) MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 节点) MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(表达式 node,IBsonSerializerRegistry serializerRegistry)at MongoDB.Driver.Linq.MongoQueryProviderImpl
1.Translate(Expression expression) at MongoDB.Driver.Linq.MongoQueryProviderImpl
1.ExecuteAsync [TResult](式 表达,CancellationToken cancellationToken)at MongoDB.Driver.Linq.MongoQueryableImpl2.ToCursorAsync(CancellationToken cancellationToken) at MongoDB.Driver.IAsyncCursorSourceExtensions.<ToListAsync>d__4
1.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Core.Persistence.MongoDb.MongoDbImp.<QueryAsync>d__12
1.MoveNext() 在 C:\用户\库\ mojio.core的\ src \ Core.Persistence.MongoDb \ MongoDb.Implementation.cs:行 68
我很高兴在正确的方向上任何帮助都会受到赞赏
编辑:
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; }
}
答案 0 :(得分:0)
我正在使用复杂的对象测试它,它似乎对我有用。您使用的是什么版本的Mongo C#驱动程序?你能提供有关复杂物体的更多细节吗?也许列出两个对象的属性会有所帮助。