Heim >Backend-Entwicklung >C++ >Wie kann ich eine zufällige Zeile mit Bedingungen mit LINQ zu SQL effizient abrufen?

Wie kann ich eine zufällige Zeile mit Bedingungen mit LINQ zu SQL effizient abrufen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-26 16:06:09616Durchsuche

How to Efficiently Retrieve a Random Row with Conditions Using Linq to SQL?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn