Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe von Linq to SQL effizient eine zufällige Zeile mit Bedingungen abrufen?
Zufällige Zeilen abrufen, die spezifische Kriterien mit LINQ zu SQL
erfüllenExtrahieren einer zufälligen Datenbankzeile, die bestimmte Bedingungen mit LINQ zu SQL erfüllt, kann schwierig sein. Eine gemeinsame Lösung beinhaltet eine simulierte benutzerdefinierte Funktion (UDF) in der Datenbank.
Um dies zu erreichen, integrieren Sie die folgende Funktion in die Teilklasse Ihres Datenkontextes:
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { throw new NotImplementedException(); } }</code>
Beachten Sie, dass diese C# -Funktion nicht direkt genannt wird. Sein Zweck ist es, die NEWID()
-Funktion des SQL Servers für die zufällige Bestellung zu nutzen. Dies geschieht durch Bestellung Ihrer Abfrage mit ctx.Random()
:
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive orderby ctx.Random() select row).FirstOrDefault();</code>
Diese Methode funktioniert gut für kleinere Datensätze. Die Leistung kann jedoch mit größeren Tischen leiden. Für wesentliche Datensätze beinhaltet ein effizienterer Ansatz zuerst die Zeilen und dann die Auswahl eines zufälligen Index:
<code class="language-csharp">var qry = from row in ctx.Customers where row.IsActive select row; int count = qry.Count(); // First database query int index = new Random().Next(count); Customer cust = qry.Skip(index).FirstOrDefault(); // Second database query</code>
Diese Alternative erfordert zwei Datenbankinteraktionen, vermeidet jedoch die potenziellen Leistungs Engpässe, um große Tabellen zufällig zu bestellen. Wählen Sie die Methode aus, die für Ihre Datengröße und Leistungsanforderungen am besten geeignet ist.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Linq to SQL effizient eine zufällige Zeile mit Bedingungen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!