Загружать следующую запись в таблицу только итерацией между двумя записями Linq C# Npgsql
На моем просмотре / странице я загружаю 1 запись при загрузке страницы, и каждый раз, когда нажимается следующая кнопка, я намереваюсь загружать следующую одиночную (ОДНУ) запись в таблицу и так далее до тех пор, пока не появится последняя. Поэтому я обновляю страницу следующей записью.
[Просмотр при нажатии следующей кнопки]
Теперь, когда один нажимает следующую кнопку, у меня есть следующее
Ввиду
<a class="form-group" style="float: left; margin-right: 5px;">
<input type="submit" value="Next" name="NextRecordButton" class="btn btn-primary" />
</a>
В контроллере
if (NextRecordButton == "Next" && Request.HttpMethod == "POST")
{
/*keep track of the current id on page*/
string idOnView = Request.Form["q_guid"];
var currentRowId = Guid.Parse(idOnView);
/*select next id*/
var myNext = db.q_product.Where(i => i.q_guid != currentRowId)
.OrderBy(i => i.q_guid)
.Skip(1)
.First().q_guid;
ViewBag.NextProduct = myNext;
var idNext = Convert.ToString(ViewBag.NextProduct);
NpgsqlConnection connectionSearch = new NpgsqlConnection("Host=test;Database=test;Username=test;Password=test");
connectionSearch.Open();
NpgsqlCommand cmdNext = new NpgsqlCommand
("SELECT * FROM q_product " +
"WHERE @idnext ilike '%' || q_guid || '%'" +
"FETCH FIRST 1 ROWS ONLY"
, connectionSearch);
cmdNext.Parameters.AddWithValue("@idnext", idNext);
cmdNext.ExecuteNonQuery();
ПРОБЛЕМА
Теперь при нажатии следующей кнопки с этим кодом, - он отлично загрузит 2-й товар на страницу. Нажав еще раз - он загрузит третий товар идеально на страницу.
но с этого момента после загрузки 3-го продукта и нажатия кнопки "Далее" он продолжает перебирать 2-й и 3-й продукт по клику. Хотя в таблице более 3 продуктов.
1 ответ
Проблема была решена с помощью запроса NpgsqlCommand вместо запроса Linq. Так что этот раздел
/*select next id*/
var myNext = db.q_product.Where(i => i.q_guid != currentRowId)
.OrderBy(i => i.q_guid)
.Skip(1)
.First().q_guid;
Был изменен и реализован следующим образом
/*select next id*/
NpgsqlCommand myNextSql = new NpgsqlCommand
("Select q_guid FROM q_product WHERE q_guid > :idonview LIMIT 1", connectionSearch);
myNextSql.Parameters.AddWithValue("idonview", currentRowId);
NpgsqlDataReader reader = myNextSql.ExecuteReader();
while (reader.Read())
{
var myID = reader[0].ToString();
ViewBag.NextProduct = myID;
}
connectionSearch.Close();
var idNext = Convert.ToString(ViewBag.NextProduct);
Теперь я могу пройти по всем следующим строкам в таблице при нажатии следующей кнопки. Мне любопытно узнать от более искушенных людей, почему реализация linq будет вести себя таким образом для меня, так как кажется, что это широко используемый метод, когда вы гуглите "получение следующей строки" в таблице.