在 table 中加载下一条记录,仅在两条记录之间迭代 Linq C# Npgsql
Load next record in table only iterating between two records Linq C# Npgsql
在我的 view/page 上,我在页面加载时加载 1 条记录,每次单击下一个按钮时,我打算在 table 中加载下一条 (ONE) 记录,等等直到最后一个。所以我正在用下一条记录刷新页面。
[View when next button is clicked]
现在当点击下一个按钮时,我有以下内容
在视图中
<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();
问题
现在点击带有此代码的下一步按钮,
- 它会将第二个产品完美地加载到页面上
再次点击下一步
- 它将完美地将第三个产品加载到页面上
但从加载第 3 个产品并单击“下一步”后开始,它会在单击时在第 2 个和第 3 个产品之间不断迭代。尽管 table.
中有超过 3 种产品
问题已通过使用 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);
我现在可以在单击下一步按钮时浏览 table 中的所有下一行。我很想知道更多知识渊博的人,为什么 linq 实现对我来说会这样,因为当你 google "getting next row" in table 时,它似乎是广泛使用的方法。 =12=]
在我的 view/page 上,我在页面加载时加载 1 条记录,每次单击下一个按钮时,我打算在 table 中加载下一条 (ONE) 记录,等等直到最后一个。所以我正在用下一条记录刷新页面。
[View when next button is clicked]
现在当点击下一个按钮时,我有以下内容
在视图中
<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();
问题
现在点击带有此代码的下一步按钮, - 它会将第二个产品完美地加载到页面上 再次点击下一步 - 它将完美地将第三个产品加载到页面上
但从加载第 3 个产品并单击“下一步”后开始,它会在单击时在第 2 个和第 3 个产品之间不断迭代。尽管 table.
中有超过 3 种产品问题已通过使用 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);
我现在可以在单击下一步按钮时浏览 table 中的所有下一行。我很想知道更多知识渊博的人,为什么 linq 实现对我来说会这样,因为当你 google "getting next row" in table 时,它似乎是广泛使用的方法。 =12=]