使用c#和linq

时间:2016-02-03 23:57:24

标签: c# mongodb linq

我正在尝试使用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.List 1..ctor(IEnumerable 1集合)
  at System.Linq.Enumerable.ToList [TSource](IEnumerable 1 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.MongoQueryableImpl 2.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.TaskAwaiter 1.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; }

}

1 个答案:

答案 0 :(得分:0)

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