Maison >développement back-end >C++ >Comment récupérer efficacement une ligne aléatoire avec des conditions utilisant LINQ à SQL?
Récupération de lignes aléatoires satisfaisant des critères spécifiques à l'aide de Linq to SQL
Extraire une ligne de base de données aléatoire qui remplit certaines conditions à l'aide de Linq to SQL peut être délicat. Une solution courante implique une fonction définie par l'utilisateur (UDF) simulée dans la base de données.
Pour y parvenir, intégrez la fonction suivante dans la classe partielle de votre contexte de données :
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { throw new NotImplementedException(); } }</code>
Notez que cette fonction C# n’est pas directement appelée ; son objectif est d'exploiter la fonction NEWID()
de SQL Server pour un classement aléatoire. Cela se fait en ordonnant votre requête en utilisant ctx.Random()
:
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive orderby ctx.Random() select row).FirstOrDefault();</code>
Cette méthode fonctionne bien pour les ensembles de données plus petits. Cependant, les performances peuvent souffrir avec des tables plus grandes. Pour des ensembles de données importants, une approche plus efficace consiste d'abord à compter les lignes, puis à sélectionner un index aléatoire :
<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>
Cette alternative nécessite deux interactions avec la base de données mais évite les goulots d'étranglement potentiels liés au classement aléatoire de grandes tables. Choisissez la méthode la mieux adaptée à la taille de vos données et à vos exigences de performances.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!