私はLINQを使用してデータベーステーブルにアクセスしています。テーブルの中には、何十万というレコードがあるものもあります。HUGEデータベーステーブルから読み取る
は、このようなステートメントを使用して、テーブルからの読み取り:
var records = db.Logs;
は、アプリケーションが非常に非常に遅くなります。すべてのレコードを一度に読み込みます。
ように私は、条件よりも多くして、結果をフィルタリングする必要があります。問題は、テーブルからの私の最初の読み取りは私にすべてのレコードを持って来ると、アプリケーションが非常に遅くなりますということです
if (UserID != null)
{
records = records.Where(r => r.User == UserID);
}
if (UserIP != null)
{
records = records.Where(r => r.IP == UserIP);
}
。
SQLステートメントと同じように、LINQステートメントに条件を設定する方法はありますか?
これを作成するために使用方法を古いロジックです:
string sql = "SELECT * FROM Log WHERE 1=1";
if (UserID != null)
{
sql += " AND User = '" + UserID + "'";
}
if (UserIP != null)
{
sql += " AND IP = '" + UserIP + "'";
}
sqlCmd.query(sql);
このクエリを独自のスレッドで実行し、コールバックを使用して結果を取得していますか? –
@ハミド、あなたはどのORMを使用していますか?エンティティフレームワーク? LINQ-to-SQL?どちらも、 'IQueryable'から' IEnumerable'や 'ToList()'への強制など、何かが行われない限り、あなたの "古いロジック"のように見えるスマートTSQLを生成します。 – bzlm
@ハミド、可能であれば、SQLプロファイラを起動して、実際にサーバで実行されているクエリを確認できます。それはあなたにLINQ、EFについて多くのことを教えてくれるでしょう。 –