.NET 9 -> .NET 10: запрос MongoDB с использованием массива. Содержит исключения NotSupportedException.C#

Место общения программистов C#
Ответить
Anonymous
 .NET 9 -> .NET 10: запрос MongoDB с использованием массива. Содержит исключения NotSupportedException.

Сообщение Anonymous »

После обновления с .NET 9 до .NET 10 запрос MongoDB, который раньше работал, теперь выдает исключение System.NotSupportedException во время выполнения запроса. Я ищу указатели, является ли это изменением времени выполнения в .NET 10, ошибкой драйвера MongoDB или чем-то, что я делаю неправильно?
Использование: .NET 10, MongoDB.Driver 3.5.0
Код:

Код: Выделить всё

public static async Task[*]> GetUsers(Guid[] ids)
{
return await Collection.Find(p => ids.Contains(p.UserId)).ToListAsync();
}
Исключение:

System.NotSupportedException

HResult=0x80131515

Message=Заданный метод не поддерживается.

Source=System.Private.CoreLib
StackTrace:

at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()

at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags ignoreAttr, связыватель Binder, параметры Object[], культура CultureInfo)

at System.Delegate.DynamicInvokeImpl(Object[] args)

at MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Evaluate(выражение выражения)

at MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Visit(выражение выражения)

at System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(посетитель ExpressionVisitor, узлы IArgumentProvider)

at System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(узел MethodCallExpression)

at MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Visit(Выражение выражения)

at System.Linq.Expressions.ExpressionVisitor.VisitLambda[T](Выражение

Код: Выделить всё

1 node)   at MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Visit(Expression expression)   at MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.EvaluatePartially(Expression expression)   at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToFilter[TDocument](Expression
1 выражение, IBsonSerializer

Код: Выделить всё

1 documentSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions)    at MongoDB.Driver.ExpressionFilterDefinition
1.Render(RenderArgs

Код: Выделить всё

1 args)   at MongoDB.Driver.MongoCollectionImpl
1.CreateFindOperation[TProjection](FilterDefinition

Код: Выделить всё

1 filter, FindOptions
2 варианта)

в MongoDB.Driver.MongoCollectionImpl

Код: Выделить всё

1.FindAsync[TProjection](IClientSessionHandle session, FilterDefinition
1 фильтр, FindOptions

Код: Выделить всё

2 options, CancellationToken cancellationToken)   at MongoDB.Driver.MongoCollectionImpl
1.d__55

Код: Выделить всё

1.MoveNext()   at MongoDB.Driver.IAsyncCursorSourceExtensions.d__17
1.MoveNext()

Работает:

Код: Выделить всё

var filter = Builders.Filter.In(p => p.UserId, ids);
  • Это изменение поведения в .NET 10, которое не позволяет использовать метод contains захваченного массива внутри выражений LINQ MongoDB? Тот же код работал в .NET 9, но теперь выдает System.NotSupportedException.
  • Разве методы LINQ, которые работают с захваченными коллекциями (например, contains, Any, Count), больше не безопасно использовать внутри выражений, переданных в IMongoCollection.Find(...) с MongoDB.Driver? Если да, то какие методы затронуты?
  • Является ли Builders.Filter.In(...) рекомендуемым долгосрочным решением для этого сценария или поставщик LINQ должен снова принять array.Contains(x)? Существуют ли различия в производительности или правильности, о которых мне следует знать при переходе на Filter.In?


Подробнее здесь: https://stackoverflow.com/questions/798 ... tedexcepti
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»