Maison > développement back-end > C++ > Comment récupérer efficacement une ligne aléatoire avec des conditions utilisant LINQ à SQL?

Comment récupérer efficacement une ligne aléatoire avec des conditions utilisant LINQ à SQL?

Patricia Arquette
Libérer: 2025-01-26 16:12:10
original
637 Les gens l'ont consulté

How to Efficiently Fetch a Random Row with Conditions Using Linq to 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 :

partial class MyDataContext {
     [Function(Name="NEWID", IsComposable=true)] 
     public Guid Random() 
     { 
         throw new NotImplementedException(); 
     }
}
Copier après la connexion

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() :

var cust = (from row in ctx.Customers
           where row.IsActive 
           orderby ctx.Random()
           select row).FirstOrDefault();
Copier après la connexion

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 :

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal