.NET 9 -> .NET 10: MongoDB-Abfrage mit array.Contains löst eine NotSupportedException ausC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 .NET 9 -> .NET 10: MongoDB-Abfrage mit array.Contains löst eine NotSupportedException aus

Post by Anonymous »

Nach dem Upgrade von .NET 9 auf .NET 10 löst eine MongoDB-Abfrage, die früher funktionierte, jetzt während der Abfrageausführung eine System.NotSupportedException aus. Ich suche nach Hinweisen, ob dies eine Laufzeitänderung in .NET 10, ein MongoDB-Treiberfehler oder etwas ist, was ich falsch mache?
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();
}
Ausnahme:

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](Expression
1 Ausdruck, IBsonSerializer

Code: Select all

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

Code: Select all

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

Code: Select all

1 filter, FindOptions
2 Optionen)

bei MongoDB.Driver.MongoCollectionImpl

Code: Select all

1.FindAsync[TProjection](IClientSessionHandle session, FilterDefinition
1 Filter, FindOptions

Code: Select all

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

Code: Select all

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

Arbeitet:

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?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post