ホームページ > バックエンド開発 > C++ > Linq to SQL を使用して条件付きでランダムな行を効率的に取得する方法

Linq to SQL を使用して条件付きでランダムな行を効率的に取得する方法

Linda Hamilton
リリース: 2025-01-26 16:06:09
オリジナル
636 人が閲覧しました

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

Linq to SQL 条件下でのデータ行の効率的なランダム取得

Linq to SQL を使用してデータベースにクエリを実行することは、リレーショナル データベース データを取得するための強力な方法です。ただし、特定の条件を適用しながらランダムな行を選択すると、いくつかの課題が生じます。この記事では、この問題に対する効率的な解決策を検討します。

シミュレートされたユーザー定義関数 (UDF) を使用する

Linq to SQL には、ランダムな行を直接選択する方法がありません。この制限を克服するために、データベース内にモック UDF を作成できます。これは、次のように部分データ コンテキスト クラスにメソッドを追加することで実現できます:

partial class MyDataContext {
     [Function(Name="NEWID", IsComposable=true)] 
     public Guid Random() 
     { // 证明我们的C#代码未使用... 
         throw new NotImplementedException(); 
     }
}
ログイン後にコピー

この UDF は、SQL Server でランダムな順序付けを可能にするプレースホルダーとして機能します。

ランダムな順序を適用します

モック UDF を配置したら、ctx.Random() メソッドを呼び出して LINQ クエリを並べ替えることができます。これにより、NEWID() 関数を使用してランダムな並べ替えを実行するようにデータベースに指示されます。

var cust = (from row in ctx.Customers
           where row.IsActive // 你的筛选条件
           orderby ctx.Random()
           select row).FirstOrDefault();
ログイン後にコピー

このクエリは、指定された基準を満たす 1 つのランダムな行を取得します。

パフォーマンスノート

この UDF メソッドを使用すると、大きなテーブルのパフォーマンスに影響を与える可能性があることに注意してください。この場合、より効率的なアプローチは、(Count() メソッドを使用して) 行数を決定し、ランダムなインデックスを生成し、Skip() メソッドと FirstOrDefault() メソッドを使用してランダムな行を取得することです。

カウントベースのメソッド

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(); // 第二次往返数据库
ログイン後にコピー

以上がLinq to SQL を使用して条件付きでランダムな行を効率的に取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート