Récupération de lignes aléatoires avec filtrage conditionnel dans LINQ to SQL
Besoin de récupérer une ligne de base de données aléatoire répondant à certains critères à l'aide de LINQ to SQL ? Ceci est particulièrement utile lorsque l’enregistrement spécifique n’est pas critique, mais que ses conditions associées le sont. Par exemple, sélectionner un client actif aléatoire.
La méthode la plus efficace implique une fonction définie par l'utilisateur (UDF) « factice » dans la base de données.
Dans une classe partielle pour votre contexte de données, créez une fonction comme celle-ci :
<code class="language-csharp">partial class MyDataContext { [Function(Name="NEWID", IsComposable=true)] public Guid Random() { throw new NotImplementedException(); } }</code>
Cette fonction fait office de marqueur pour la base de données ; votre code C# ne l'appellera pas directement. Il signale l'utilisation de la fonction aléatoire de la base de données.
Utilisez l'UDF dans votre requête LINQ to SQL pour trier de manière aléatoire les lignes correspondant à vos conditions. Exemple :
<code class="language-csharp">var cust = (from row in ctx.Customers where row.IsActive // Your filter condition orderby ctx.Random() select row).FirstOrDefault();</code>
La clause OrderBy
utilise ctx.Random()
pour ordonner les lignes de manière aléatoire en fonction de la fonction NEWID()
de la base de données. Le résultat est une ligne aléatoire satisfaisante row.IsActive
.
Cette méthode est idéale pour les tables de petite à moyenne taille. Pour les très grandes tables, la surcharge côté serveur peut être importante. Dans de tels scénarios, il est plus efficace de :
Skip
et First
pour récupérer la ligne spécifique.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!