Heim >Backend-Entwicklung >C++ >Wie kann ich eine zufällige Zeile mit Bedingungen mit LINQ zu SQL effizient abrufen?
Effizienter zufälliger Abruf von Datenzeilen unter Linq to SQL-Bedingungen
Die Verwendung von Linq to SQL zum Abfragen der Datenbank ist eine leistungsstarke Methode zum Abrufen relationaler Datenbankdaten. Die Auswahl zufälliger Zeilen unter Anwendung bestimmter Bedingungen stellt jedoch einige Herausforderungen dar. In diesem Artikel wird eine effiziente Lösung für dieses Problem untersucht.
Verwenden Sie simulierte benutzerdefinierte Funktionen (UDF)
Linq to SQL bietet keine direkte Möglichkeit, zufällige Zeilen auszuwählen. Um diese Einschränkung zu überwinden, kann eine Schein-UDF in der Datenbank erstellt werden. Dies kann erreicht werden, indem der Teildatenkontextklasse eine Methode wie folgt hinzugefügt wird:
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { // 证明我们的C#代码未使用... throw new NotImplementedException(); } }</code>
Diese UDF fungiert als Platzhalter, um die zufällige Reihenfolge in SQL Server zu ermöglichen.
Zufällige Reihenfolge anwenden
Sobald die Schein-UDF vorhanden ist, kann die LINQ-Abfrage durch Aufrufen der ctx.Random()
-Methode sortiert werden. Dadurch wird die Datenbank angewiesen, mithilfe der Funktion NEWID()
eine zufällige Sortierung durchzuführen.
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive // 你的筛选条件 orderby ctx.Random() select row).FirstOrDefault();</code>
Diese Abfrage ruft eine einzelne zufällige Zeile ab, die die angegebenen Kriterien erfüllt.
Leistungshinweise
Es ist zu beachten, dass die Verwendung dieser UDF-Methode die Leistung großer Tabellen beeinträchtigen kann. In diesem Fall besteht ein effizienterer Ansatz darin, die Anzahl der Zeilen zu bestimmen (mit der Methode Count()
), einen Zufallsindex zu generieren und dann die Zufallszeilen mit den Methoden Skip()
und FirstOrDefault()
abzurufen.
Zählungsbasierte Methode
<code class="language-csharp">var qry = from row in ctx.Customers where row.IsActive select row; int count = qry.Count(); // 第一次往返数据库 int index = new Random().Next(count); Customer cust = qry.Skip(index).FirstOrDefault(); // 第二次往返数据库</code>
Das obige ist der detaillierte Inhalt vonWie kann ich eine zufällige Zeile mit Bedingungen mit LINQ zu SQL effizient abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!