現在、プロジェクトで LINQ to SQL を使用する際に問題が発生しています。これは、長い SQL クエリ (またはむしろビュー) のほとんどが C# にハードコードされているためであり、私たちがずっと行ってきたことは を使用することcontext.Database.SqlQuery<ClassName>(sql, sqlParams)
です。
これは一般的に非常に効果的ですが、今はもっとダイナミックなものが必要です。.Where(x => x.Name.Contains("Anonymous")).Take(20)
線に沿って、何か他のものをプラグインする必要があります。ただし、前述のコード行に直接プラグインすると、次のようになります。
context.Database.SqlQuery<ClassName>(sql, sqlParams).Where(x => x.Name.Contains("Anonymous")).Take(20);
実際には機能し、名前に「Anonymous」が含まれる上位 20 レコードをプルしますが、パフォーマンスはかなり悪いです。舞台裏で行われているのは、そのテーブルからすべてのレコードを取得し、それらをメモリにロードした後に最終的にフィルタリングすることです。
次に、テキスト SQL を LINQ に変換する方法、または LINQ を SQL に変換して、テキスト SQL と LINQ の両方を 1 つのステートメントで実行できるようにする方法はありますか。実際に解決策がない場合は、提案もいただければ幸いです...!
編集:式ツリーの使用を検討しましたが、実際にどのように図に収まるかはわかりません。また、データベース ビューの使用も検討しました。しかし、非常に多くのビュー (テーブルごとにかなりの数) があるため、すべてを MS SQL に移植し、すべてのクエリ ロジックを書き直すのは間違いなく面倒です。