LINQ to SQL effizienter zufälliger Zeilenabruf
Beim Verwenden von LINQ to SQL zum Abrufen zufälliger Zeilen aus einer Datenbank können Leistungsprobleme auftreten, wenn Sie sich auf clientseitige Filterung und Randomisierung verlassen. Die folgenden Methoden bieten eine effiziente Möglichkeit, zufällige Zeilen abzurufen, die bestimmten Kriterien entsprechen:
Verwenden Sie simulierte benutzerdefinierte Funktionen (UDF)
Für kleine bis mittelgroße Tabellen können Sie eine Schein-UDF verwenden, um Randomisierungsvorgänge auf Datenbankebene durchzuführen. Definieren Sie im Datenkontext eine Teilklasse und fügen Sie die folgende Methode hinzu:
partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { throw new NotImplementedException(); } }
Obwohl diese UDF nicht tatsächlich im C#-Code implementiert ist, wird sie von SQL Server verwendet, um eine zufällige Reihenfolge durchzuführen. Um zufällige Zeilen basierend auf einer Bedingung abzurufen, verwenden Sie die folgende Abfrage:
var cust = (from row in ctx.Customers where row.IsActive // 您的筛选条件 orderby ctx.Random() select row).FirstOrDefault();
Zählungsbasierte Methode
Bei großen Tabellen kann ein zählbasierter Ansatz effizienter sein. So funktioniert es:
qry.Count()
, um die Gesamtzahl der Zeilen zu berechnen. qry.Skip(index).FirstOrDefault()
, um die Zeile an einem zufälligen Index abzurufen. Diese Methode umfasst zwei Roundtrips zur Datenbank, lässt sich jedoch besser mit der Tabellengröße skalieren als die Verwendung einer Zufallssortierfunktion.
Das obige ist der detaillierte Inhalt vonWie kann ich zufällige Zeilen aus einer Datenbank mit LINQ nach SQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!