MongoDB Query with Tuple

1

У меня есть следующая структура документа:

{
  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();

Однако Mongo не понимает, как сериализовать этот запрос.

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, поскольку это работает только в одном документе.

Теги:
mongodb-.net-driver

1 ответ

0

Текущая версия драйвера (1.x) построена для.NET 3.5 и не знает о том, как сериализовать кортежи. Если вы хотите, вы можете написать сериализатор кортежей и зарегистрировать его таким образом, чтобы этот запрос мог работать.

Тем не менее, я бы предположил, что было бы просто не использовать Tuple и вместо этого создать простой частный класс и использовать его вместо этого.

  • 0
    Привет, Крейг, спасибо за помощь. Использование частного класса или анонимного класса не исправляет это. Просто выдает ту же ошибку, но с другим именем класса. Невозможно определить информацию сериализации для выражения: Temp []: {Namespace + Temp}.
  • 0
    Можете ли вы сказать мне, как должен выглядеть запрос mongodb?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню