Verwendet: .NET 10, MongoDB.Driver 3.5.0
Code:
Code: Select all
public static async Task[*]> GetUsers(Guid[] ids)
{
return await Collection.Find(p => ids.Contains(p.UserId)).ToListAsync();
}
System.NotSupportedException
HResult=0x80131515
Message=Angegebene Methode wird nicht unterstützt.
Source=System.Private.CoreLib
StackTrace:
at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()
bei System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[]-Parameter, CultureInfo-Kultur)
bei System.Delegate.DynamicInvokeImpl(Object[] args)
bei MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Evaluate(Expression expression)
bei MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Visit(Expression expression)
bei System.Dynamic.Utils.ExpressionVisitorUtils.VisitArguments(ExpressionVisitor-Besucher, IArgumentProvider-Knoten)
bei System.Linq.Expressions.ExpressionVisitor.VisitMethodCall(MethodCallExpression-Knoten)
bei MongoDB.Driver.Linq.Linq3Implementation.Misc.PartialEvaluator.SubtreeEvaluator.Visit(Expression expression)
at System.Linq.Expressions.ExpressionVisitor.VisitLambda[T](Expression
Code: Select all
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](ExpressionCode: Select all
1 documentSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions) at MongoDB.Driver.ExpressionFilterDefinitionCode: Select all
1 args) at MongoDB.Driver.MongoCollectionImplCode: Select all
1 filter, FindOptionsbei MongoDB.Driver.MongoCollectionImpl
Code: Select all
1.FindAsync[TProjection](IClientSessionHandle session, FilterDefinitionCode: Select all
2 options, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImplCode: Select all
1.MoveNext() at MongoDB.Driver.IAsyncCursorSourceExtensions.d__17Arbeitet:
Code: Select all
var filter = Builders.Filter.In(p => p.UserId, ids);
- Ist dies eine Verhaltensänderung in .NET 10, die die Verwendung der Contains-Methode eines erfassten Arrays in MongoDB LINQ-Ausdrücken verhindert? Der gleiche Code funktionierte unter .NET 9, löst aber jetzt System.NotSupportedException aus.
- Sind LINQ-Methoden, die auf erfassten Sammlungen arbeiten (z. B. Contains, Any, Count), nicht mehr sicher für die Verwendung in Ausdrücken, die mit dem MongoDB.Driver an IMongoCollection.Find(...) übergeben werden? Wenn ja, welche Methoden sind betroffen?
- Ist Builders.Filter.In(...) die empfohlene langfristige Lösung für dieses Szenario, oder sollte der LINQ-Anbieter array.Contains(x) erneut akzeptieren? Gibt es Leistungs- oder Korrektheitsunterschiede, die ich beim Wechsel zu Filter.In beachten sollte?
Mobile version