я иметь следующую структуру документа:MongoDB запрос с Кортежем
{
Foo: BinData
Bar: Integer
}
Я хочу, чтобы искать эти документы (у них есть другие поля) два полямих Foo и Bar (они вместе составляют ключ к поиску для).
В настоящее время я делаю это:
List<Tuple<byte[], int>> fooBarList = mySearchValues;
return Collection.AsQueryable().OfType<MyType>()
.Where(x => fooBarList.Any(y => x.Foo == y.Item1 && x.Bar == y.Item2))
.ToArray();
Однако Монго не понимает, как сериализовать этот запрос.
System.NotSupportedException: Unable to determine the serialization information for the expression: System.Collections.Generic.List`1[System.Tuple`2[System.Byte[],System.Int32]].
at MongoDB.Driver.Linq.Utils.BsonSerializationInfoFinder.GetSerializationInfo(Expression node, Dictionary`2 serializationInfoCache)
at MongoDB.Driver.Linq.PredicateTranslator.BuildAnyQuery(MethodCallExpression methodCallExpression)
at MongoDB.Driver.Linq.PredicateTranslator.BuildMethodCallQuery(MethodCallExpression methodCallExpression)
at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression)
at MongoDB.Driver.Linq.PredicateTranslator.BuildQuery(Expression expression)
at MongoDB.Driver.Linq.SelectQuery.Execute()
at MongoDB.Driver.Linq.MongoQueryable`1.GetEnumerator()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
У кого-то уже есть аналогичный запрос к этому, если да, то как я могу это сделать? Я не могу использовать $ in, поскольку это работает только в одном документе.
Привет Крейг, спасибо вам за помощь. Использование частного класса или анонимного класса не устраняет это. Он просто дает ту же ошибку, но с другим именем класса. Невозможно определить информацию о сериализации для выражения: Temp []: {Namespace + Temp}. – James
Можете ли вы рассказать мне, как должен выглядеть запрос mongodb? –
Запрос должен искать документы, которые соответствуют как Foo, так и Bar в списке данных запроса (пар Foo и Bar). Существует пример C# того, что я ожидаю, что это должно выглядеть выше. – James