我将尝试使用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(Expression node, Dictionary2 serializationInfoCache)处”
“在MongoDB.Driver.Linq.PredicateTranslator.BuildComparisonQuery(Expression variableExpression, ExpressionType operatorType, ConstantExpression constantExpression)处建立比较查询”
“这是因为无法找到p.Address.HouseNumber的BSON映射定义。 若此字段不存在,请检查对象和其字段名称是否正确。”
如果使用当前版本的驱动程序,则不会发生以上错误。
[Address].HouseNumber不被支持。
在 MongoDB.Driver.Linq.Translators.PredicateTranslator.GetFieldExpression(Expression 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 node) 处, MongoDB.Driver.Linq.Translators.PredicateTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateWhere(WhereExpression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateSkip(SkipExpression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateTake(TakeExpression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslatePipeline(PipelineExpression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node) 处, MongoDB.Driver.Linq.Translators.QueryableTranslator.Translate(Expression node, IBsonSerializerRegistry serializerRegistry) 处, MongoDB.Driver.Linq.MongoQueryProviderImpl<code>1.Translate(Expression expression) 处, MongoDB.Driver.Linq.MongoQueryProviderImpl<code>1.ExecuteAsync<TResult>(Expression expression, CancellationToken cancellationToken)处, MongoDB.Driver.Linq.MongoQueryableImpl<code>2.ToCursorAsync(CancellationToken cancellationToken)处, MongoDB.Driver.IAsyncCursorSourceExtensions.<ToListAsync>d__4<code>1.MoveNext() 处。 --- 在上一个引发异常的位置堆栈上的结尾 --- 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 处, 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 处, 在 System.Runtime.CompilerServices.TaskAwaiter<code>1.GetResult() at Core.Persistence.MongoDb.MongoDbImp.<QueryAsync>d__12<code>1.MoveNext(),位置 C:\Users...\libs\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; }
}
query
是什么? - Shi Her