首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用c#和linq查询mongo中的嵌套属性

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

Stack Overflow用户
提问于 2016-02-03 23:57:24
回答 1查看 726关注 0票数 3

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

以下功能很好:

代码语言:javascript
复制
query.Where(o => (o.Name == "Joe"))

但这给我带来了错误:

代码语言:javascript
复制
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.MongoQueryProviderImpl1.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

如果你能帮我找到正确的方向,我会很高兴的

编辑:

代码语言:javascript
复制
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; }

}
EN

回答 1

Stack Overflow用户

发布于 2016-02-08 16:52:52

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35190094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档