-3

Point Of Service アプリケーションの Entity Framework を使用して SQL Server CE データベースにクエリを実行し、結果を出力するメソッドがあります。私が使用しているコードは機能しますが、データベースのサイズが大きくなると、メソッドの実行に時間がかかります。これは、目的の結果を得るためにデータベースが複数回クエリされているためだと思います。私が実際にやりたいことは、データベースに対して 1 回クエリを実行し、結果をメモリに保存してから、メモリに保存されたデータに対して他のすべてのクエリを実行することです。

このメソッドは主に、データベースにクエリを実行して今日の取引 (ZTotaled == null) を検索し、取引日の 30 分ごとの取引数と総売上高を出力する必要があります。

私が使用しているコードは次のようになります...

var ztotal = from z in context.Transactions
where z.ZTotaled == null
select new { z.NumerPeople, z.PricePaid, z.ZTotaled, z.DateTime }; 


var ztotal2 = from z in ztotal
where z.ZTotaled == null && z.DateTime.Hour == 18 && z.DateTime.Minute < 30
select new { z.NumerPeople, z.PricePaid };


totalPeople = ztotal2.Sum(o => o.NumerPeople);
totalPaid = ztotal2.Sum(o => o.PricePaid);


sb2.Append(string.Format("{0}{1,10}{2,16}", "18.00 - 18.30", totalPeople.ToString(), totalPaid.ToString()) + Environment.NewLine);

ztotal2 = from z in ztotal
where z.ZTotaled == null && z.DateTime.Hour == 18 && z.DateTime.Minute >= 30
select new { z.NumerPeople, z.PricePaid };

totalPeople = ztotal2.Sum(o => o.NumerPeople);
totalPaid = ztotal2.Sum(o => o.PricePaid);

sb2.Append(string.Format("{0}{1,10}{2,16}", "18.30 - 19.00", totalPeople.ToString(), totalPaid.ToString()) + Environment.NewLine);

ztotal2 = from z in ztotal
where z.ZTotaled == null && z.DateTime.Hour == 19 && z.DateTime.Minute < 30
select new { z.NumerPeople, z.PricePaid };

totalPeople = ztotal2.Sum(o => o.NumerPeople);
totalPaid = ztotal2.Sum(o => o.PricePaid);

sb2.Append(string.Format("{0}{1,10}{2,16}", "19.00 - 19.30", totalPeople.ToString(), totalPaid.ToString()) + Environment.NewLine);

ztotal2 = from z in ztotal
where z.ZTotaled == null && z.DateTime.Hour == 19 && z.DateTime.Minute >= 30
select new { z.NumerPeople, z.PricePaid };

totalPeople = ztotal2.Sum(o => o.NumerPeople);
totalPaid = ztotal2.Sum(o => o.PricePaid);

sb2.Append(string.Format("{0}{1,10}{2,16}", "19.30 - 20.00", totalPeople.ToString(), totalPaid.ToString()) + Environment.NewLine);

ztotal2 = from z in ztotal
where z.ZTotaled == null && z.DateTime.Hour == 20 && z.DateTime.Minute < 30
select new { z.NumerPeople, z.PricePaid };

totalPeople = ztotal2.Sum(o => o.NumerPeople);
totalPaid = ztotal2.Sum(o => o.PricePaid);

sb2.Append(string.Format("{0}{1,10}{2,16}", "20.00 - 20.30", totalPeople.ToString(), totalPaid.ToString()) + Environment.NewLine);

誰かがこのコードをより効率的にする方向を教えてくれませんか?

どうもありがとう

ジェームズ

4

1 に答える 1