Использование: .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 documentSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions) at MongoDB.Driver.ExpressionFilterDefinitionКод: Выделить всё
1 args) at MongoDB.Driver.MongoCollectionImplКод: Выделить всё
1 filter, FindOptionsв MongoDB.Driver.MongoCollectionImpl
Код: Выделить всё
1.FindAsync[TProjection](IClientSessionHandle session, FilterDefinitionКод: Выделить всё
2 options, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImplКод: Выделить всё
1.MoveNext() at MongoDB.Driver.IAsyncCursorSourceExtensions.d__17Работает:
Код: Выделить всё
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
Мобильная версия