私はデータベースとEFを初めて使用しています。私は、ASP.NET Core MVCプロジェクト内でEFを使用しています。以下の実装コードはコントローラからのもので、2つのテーブルのデータをサマリにまとめることを目的としています。DBの最初のEntity Frameworkクエリが非常に遅い
データベースには、Batch、Docというテーブルがあります。
バッチには、int BatchId、string BatchEndなどの多くの列があります。 BatchEndは一貫してフォーマットされたDateTimeです。 23/09/2016 14:33:21
Docには、文字列BatchId、文字列HardCopyDestinationが含まれます。多くのDocは同じBatchIdを参照することができますが、それを行うすべてのDocはHardCopyDestinationと同じ値を持ちます。私は、次のViewModel
public class Batch
{
public int BatchId { get; set; }
public string Time { get; set; } // from BatchEnd
public string HardCopyDestination { get; set; }
}
しかし、私の現在のクエリを移入したい
は、下記、犬が遅い実行されています。私はこれを正しく実装しましたか?
var BatchViewModels = new List<Batch>();
// this is fine
var batches = _context.BatchTable.Where(
b => b.BatchEnd.Contains(
DateTime.Now.Date.ToString("dd/MM/yyyy")));
// this bit disappears down a hole
foreach (var batch in batches)
{
var doc = _context.DocTable.FirstOrDefault(
d => d.BatchId == batch.BatchId.ToString());
if (doc != null)
{
var newBatchVM = new Batch
{
BatchId = batch.BatchId,
Time = batch.BatchEnd.Substring(whatever to get time),
HardCopyDestination = doc.HardCopyDestination
};
BatchViewModels.Add(newBatchVM);
continue;
}
}
return View(BatchViewModels);
なぜ文字列を使用してDateTimeインスタンスを表現していますか? Sql Serverでは、 'System.DateTime'を.net(c#)と' DateTime2(7) 'や' DateTime'で使うべきです。日付時間ですが、文字列ではありません)*。また、日付がどのようにフォーマットされているか(dd/mm/yyyyまたはmm/dd/yyyyなど)はプレゼンテーション層の解決策であり、決して持続層に持ち越されるべきではありません。 – Igor
あなたの日付で奇妙なことをしています – KSib
@Igorデータベースは私の影響範囲外に設計されています。私は自分自身のViewModelに影響を与えることができるので、それを完全に解析するだけでなく、時間要素として表示することができます。 –