2016-12-15 4 views
0

Я хочу вернуть два результата одним запросом. Например, запрошенная таблица, и, кроме того, я хочу вернуть размер всей таблицы.Dapper возвращает несколько результатов одним запросом

Я не могу сделать это в C#, потому что хочу только запросить, например, первые 100 результатов, но клиент должен будет запросить следующие 100 результатов. Но заранее хочу показать клиенту, есть ли дальнейшие результаты.

Например, у меня есть таблица с 150 результатами. В первом вызове я получаю только первые 100 результатов. Но я также хочу получить информацию о том, что осталось еще 50 результатов без вызова второго запроса. Это возможно с dapper?

+0

Получить общее количество записей, то первые 100 записей и всего - 100, используя один запрос? – TheFallenOne

ответ

0

Возможно ли это с помощью dapper?

Dapper - это просто объектно-реляционный картограф, то есть карты от объектно-ориентированной модели домена к реляционной базе данных. Вам все равно нужно спросить базу данных (используя запрос), сколько записей в общей сложности. Даппер не будет волшебным образом понять это для вас.

Таким образом, вам необходимо изменить запрос, который вы отправляете в базу данных (используя Dapper), чтобы выбрать не только первые 100 строк из таблицы, но и дополнительный столбец, который содержит число, определяющее общее количество записей в Таблица. Только база данных знает этот номер, поэтому вам придется попросить его об этом.

0

Вы можете попробовать QueryMultiple:

using (var conn = new SqlConnection(@"Data Source=.\sqlexpress;Integrated Security=true; Initial Catalog=foo")) 
{ 
    using (var data = conn.QueryMultiple("select count(*) as TotalCount from data; select top 2 * from data", null)) 
    { 
     var totalRecords = data.Read<int>().Single(); 
     var records = data.Read<dynamic>(); 
     var remaining = totalRecords - records.Count(); 
    } 
} 
+0

Это может выполнить требование OP, но это не совсем то, о чем он просит. Это все равно выполнит два запроса. Это будет их партиями. Я согласен с @ mm8. –

+0

Это два запроса sql, но одна поездка в БД. –

0

Если вы действительно просто хочу знать, если есть больше результатов и не сколько, вы могли бы ограничить результаты до 101. Затем выбросить 101-й строки, которые является всего лишь индикатором, который содержит более 100 строк.

0

Вы также можете запросить всю таблицу, но показываете только первые 100 строк, и вы уже знаете, если есть больше данных, чтобы показать, когда пользователь просит следующий набор данных

Смежные вопросы