我试图使用linq查询来过滤来自Mongo的结果,但是我使用复杂对象的查询都不起作用:
以下功能很好:
query.Where(o => (o.Name == "Joe"))但这给我带来了错误:
query.Where(o => (o.Address.HouseNumber == "1234"))对于2.1.1版本的c#驱动程序,如果我使用遗留驱动程序,就会得到:
无法确定表达式的序列化信息: p.Address.HouseNumber 在MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(Expression节点,字典
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.MongoQueryable1.1.GetEnumerator()在System.Collections.Generic.List1..ctor(IEnumerable1集合中) 在Core.Persistence.LegacyMongoDb.LegacyMongoDbImp.d__10`1.MoveNext() ( C:\Users...\src\Core.Persistence.LegacyMongoDb\LegacyMongoDb.Implementation.cs:line 84 )的System.Linq.Enumerable.ToListTSource
如果我使用当前版本的驱动程序,就会得到:
不支持Address.HouseNumber。 (在MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression表达式)在MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(Expression variableExpression,ExpressionType operatorType,ConstantExpression constantExpression(在MongoDB.Driver.Linq.Translators.PredicateTranslator.TranslateComparison(BinaryExpression binaryExpression)在MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression节点))在MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression节点,(在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点(在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateSkip(SkipExpression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点(在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateTake(TakeExpression节点)(在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression)在MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression节点))在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点)在MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression节点,MongoDB.Driver.Linq.MongoQueryProviderImpl
1.Translate(Expression expression) at MongoDB.Driver.Linq.MongoQueryProviderImpl1.ExecuteAsyncTResult at MongoDB.Driver.Linq.MongoQueryableImpl2.ToCursorAsync(CancellationToken cancellationToken) at MongoDB.Driver.IAsyncCursorSourceExtensions.<ToListAsync>d__41.MoveNext()的IBsonSerializerRegistry serializerRegistry) --从以前抛出异常的位置开始的堆栈跟踪--在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务中)在C中的System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Core.Persistence.MongoDb.MongoDbImp.<QueryAsync>d__121.MoveNext()上:\System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Core.Persistence.MongoDb.MongoDbImp.<QueryAsync>d__121.MoveNext().\libs\mojio.core\src\Core.Persistence.MongoDb\MongoDb.Implementation.cs:line 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; }
}发布于 2016-02-08 16:52:52
我正在使用复杂的对象测试它,它似乎对我有用。您正在使用什么版本的Mongo C#驱动程序?你能给出你的复杂对象的更多细节吗?也许列出这两个对象的属性会有帮助。
https://stackoverflow.com/questions/35190094
复制相似问题