EF6, ядро asp mvc и сервер SQL используются в фоновом режиме.
Мне нужно выполнить много запросов к одной и той же таблице с разными условиями, например,
SELECT COUNT(*) FROM Table1 WHERE a = true
SELECT COUNT(*) FROM Table1 WHERE b = true
SELECT COUNT(*) FROM Table1 WHERE a = true || b = true
SELECT a FROM Table1 WHERE b = true
Итак, 4 запроса к Table1
с разными условиями. Я думаю, что в результате я должен прочитать все Table1
четыре раза. В псевдокоде это может выглядеть следующим образом.
var res1 = new list();
foreach(var rec in Table1) { // read Table1 first time
if(rec.a == true) {
res1.push(rec);
}
}
var res2 = new list();
foreach(var rec in Table1) { // read Table1 second time
if(rec.b == true) {
res2.push(rec);
}
}
var res3 = new list();
foreach(var rec in Table1) { // read Table1 third time
if(rec.a == true || rec.b == true) {
res3.push(rec);
}
}
var res4 = new list();
foreach(var rec in Table1) { // read Table1 fourth time
if(rec.b == true) {
res4.push(rec);
}
}
Я хочу знать, как прочитать Table1
только один раз и получить четыре разных результата, например:
var res1 = new List();
var res2 = new List();
var res3 = new List();
var res4 = new list();
foreach(rec in Table1) { // read Table1 first time
if(a == true) {
res1.push(rec);
}
if(b == true) {
res2.push(rec);
}
if(a == true || b == true) {
res3.push(rec);
}
if(b == true) {
res4.push(rec);
}
}
Также проблема в том, что эти запросы являются динамическими SQL, я имею в виду, что a = true
, b = true
, a = true || b = true
хранятся в базе данных. И запросы выполняются таким образом:
string query = "SELECT Count(*) FROM Table1 WHERE" + condition;
var count = ExecuteSql(query);
Приведенный выше пример упрощен, но на самом деле весь запрос разбивается и сохраняется в базе данных.
PS. На самом деле я хочу ускорить страницу, которая делает 30-40 запросов к серверу, и каждый запрос - это запрос к одной и той же таблице. Я думаю, смогу ли я заменить их одним запросом вместо 40 запросов.