クエリを最適化しようとしていますが、このクレイジーなクエリがあります。基本的な考え方は、いくつかの対応する会議がある部屋の束を得ることです。私は現在、すべての部屋を取得するためのクエリを実行し、その後、私は各部屋のクエリを行うミーティングを取得する必要がforeach部屋。これは、多くのデータベース接続(すなわち、会議を引き出すために接続を開く必要がある1000個の部屋)を開き、その代わりにバッチとして行いたいと考えています。私はモデルに私のクエリをマッピングするためにDapperのを使用していると私は、リストのパラメータが長いシーケンスに参加狂気の詳細に入るがなければhere1回のクエリではなく、大量のバッチクエリが何度も実行される
SELECT
mm.id,
mm.organizer_name as Organizer,
mm.subject as Subject,
mm.start_time as StartTime,
mm.end_time as EndTime,
(mm.deleted_at IS NOT NULL) as WasCancelled,
(am.interactive = 0 AND am.cancelled_at IS NOT NULL) as WasNoShow,
c.name as name
FROM master_meeting mm
LEFT JOIN master_meeting__exchange mme ON mme.id=mm.id
LEFT JOIN master_meeting__forwarded_exchange mmfe ON mmfe.id=mm.id
LEFT JOIN meeting_instance__exchange mie ON mie.meeting_id=mm.id
LEFT JOIN meeting_instance__forwarded_exchange mife ON mife.meeting_id=mm.id
LEFT JOIN appointment_meta__exchange ame ON mie.item_id=ame.item_id
LEFT JOIN appointment_meta__exchange ame2 ON mife.item_id=ame2.item_id
LEFT JOIN appointment_meta am ON am.id=ame.id
LEFT JOIN appointment_meta am2 ON am2.id=ame2.id
LEFT JOIN calendar c on mie.calendar_id=c.id
WHERE mie.calendar_id = @Id OR [email protected]
AND mm.start_time BETWEEN @StartTime AND @EndTime
を説明使用しようとしている、私は現在、このクエリを実行する必要があり、A lot。これは、アップ書き込まれた当初のように:これは明らかにかなりの数のデータベース接続が必要です
_connection.Query<Meeting>(sql,
new {
Id = query.id,
StartTime = query.StartTime,
EndTime = query.EndTime
}
);
、と私がしたい:今度はこの倍の束を呼び出して、クエリを実行
List<Result> resultSet = new List<Result>();
foreach(int id in idList){
resultSet.AddRange(
_queryHandler.Handle(
new MeetingQuery(id, "FixedStartTime", "FixedEndTime")
)
);
}
複数のクエリを実行Dapperのを持っていることによって、これを避けるため、私はこのようになりますリストとしてパラメータを追加しようとする場合、私は次のエラーを取得する:
class Parameters {
int Id;
string StartTime;
string EndTime;
}
List<Parameters> parameters = new List<Parameters>();
foreach(int id in idList)
parameters.Add(new Parameters(id, "SameStartTime", "SameEndTime");
その後、私はのようなパラメータのリストを使用しますこの:
_connection.Query<Meeting>(sql,parameters);
私が手にエラーがある:
dapperの追加情報:パラメータ(配列、リスト、など)の列挙シーケンスは、それはだ、まずこの文脈で