【问题标题】:Load next record in table only iterating between two records Linq C# Npgsql加载表中的下一条记录仅在两条记录之间迭代 Linq C# Npgsql
【发布时间】:2017-07-21 13:01:44
【问题描述】:

在我的视图/页面上,我在页面加载时加载 1 条记录,每次单击下一个按钮时,我都打算在表中加载下一条 (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 个产品之间迭代。即使表中有超过 3 个产品。

【问题讨论】:

    标签: postgresql custompaging


    【解决方案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 实现对我来说会这样,因为当您在表中搜索“获取下一行”时,它似乎是广泛使用的方法。

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多