采取下一步不要跳过上一个 LINQ c#



我正在尝试在项目中创建无限滚动。

场景 -

我有大约100张图片可以在我的查看页面上渲染。对于每个滚动到底部请求,我要发送的Linq乘以JQuery-

  <script type="text/javascript">
    $(function () {
        var value = 0;
        function IncreasedValue() {
            value += 10;
            return value;
        }
        $(window).scroll(function () {
            if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
                $.ajax({
                    url: '/Home/FunHome/?valuetake=' + IncreasedValue() + '&valueskip=' + "0",
                    type: 'GET',
                    datatype: 'HTML',
                    success: function (data) {
                        $('#funhome-partial').html(data);
                    }
                });
            }
        });
    });
</script>

滚动到底部时始终增加+10

第一次加载我的动作会检索5个记录,然后跳过没有(工作正常)。一旦takevalue增加了10,我就将此值解析为Linq Take()

public ActionResult FunHome(int? valueskip, int? valuetake) {
    if (valuetake == null && valueskip == null) {
        int take = 5;
        int skip = 0;
        var cardlist = (from u in db.CardTables
                        select new CardModel {
                            cardDate = u.CardDate,
                            cardFileName = u.CardFileName,
                            cardFilePath = u.CardFilePath,
                            cardHashCode = u.CardHashCode,
                            cardID = u.CardID,
                            cardTitle = u.CardTitle
                        }).Take(take).Skip(skip);
        return View(cardlist);
    }
    else {
        int skip = 0;
        int take = Convert.ToInt32(valuetake);
        var cardlist = (from u in db.CardTables
                        select new CardModel {
                            cardDate = u.CardDate,
                            cardFileName = u.CardFileName,
                            cardFilePath = u.CardFilePath,
                            cardHashCode = u.CardHashCode,
                            cardID = u.CardID,
                            cardTitle = u.CardTitle
                        }).Take(take).Skip(skip);
        return PartialView("FunHome", cardlist);
    }
}

当前发生的事情是当Ajax查询要求10个记录时,此操作将检索下一个10个记录,并通过获取所有问的记录,再次呈现所有页面。

由于在每个滚动到底部事件上渲染所有记录,所以这会减慢我的应用程序。

注意 -

我不想跳过以前的记录,因为所有图片都应显示。

是否有任何方法可以使用LINQ

来实现下一个记录
  1. Skip/Take方法应始终按以下顺序使用: Skip,然后在用于分页时Take

  2. Skip(0)是毫无意义的...

  3. 您应该只返回查询中的新元素,然后将它们附加到页面上,而不是替换整个HTML内容。在JavaScript代码中使用append()而不是html()

  4. 您可以在if/else之前准备查询定义,然后只应用正确的Skip/Take组合以防止代码重复。

public ActionResult FunHome(int? valueskip, int? valuetake) {
    var query = (from u in db.CardTables
                 select new CardModel {
                     cardDate = u.CardDate,
                     cardFileName = u.CardFileName,
                     cardFilePath = u.CardFilePath,
                     cardHashCode = u.CardHashCode,
                     cardID = u.CardID,
                     cardTitle = u.CardTitle
                 });
    if (valuetake == null && valueskip == null) {
        int take = 5;
        var cardlist = query.Take(take);
        return View(cardlist);
    }
    else {
        int skip = Convert.ToInt32(valueskip);
        int take = Convert.ToInt32(valuetake);
        var cardlist = query.Skip(skip).Take(take);
        return PartialView("FunHome", cardlist);
    }
}
<script type="text/javascript">
    $(function () {
        var value = 0;
        function IncreasedValue() {
            value += 10;
            return value;
        }
        $(window).scroll(function () {
            if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
                var currentValue = value;
                $.ajax({
                    url: '/Home/FunHome/?valuetake=' + IncreasedValue() + '&valueskip=' + currentValue,
                    type: 'GET',
                    datatype: 'HTML',
                    success: function (data) {
                        $('#funhome-partial').append(data);
                    }
                });
            }
        });
    });
</script>

最新更新