Linq获取加载数据更多按钮是单击开始索引和结束索引

时间:2016-12-30 20:48:09

标签: c# sql linq

我正在使用webApi和linq从SQL获取数据,现在我在我的页面中有加载更多按钮,当我点击时,它每次应该带20条记录,我正在使用已启动索引和结束索引具有我的表列ID,它是主键,当我单击加载更多按钮时,我将从列表视图中获取最后一个ID表示最后一个数据ID,我正在使用该Id具有我的起始索引,现在我的问题是当我点击加载更多它带来20个数据,但以前的数据已被删除,我需要获得20 + 20 = 40数据,当我第一次点击我的加载更多按钮,如何实现这一点。

 //Linq//
 public dynamic getALlImage(int userID, int LastImageID)
 {
    //here LastImageId is my Listview Last data ImageID
    if  (LastImageID!=0)
     {
       startIndex= LastImageID+20;
       EndIndex=LastImageID-20;
     }
       else
     {
      startIndex= 20;
       EndIndex=0;  
     }

  GetAllListFields = (from user in dbContext.UserTable
                      join img in dbContext.ImageTable on user.userId equals img.userID into UserVoice
                      from Image in UserVoice.DefaultIfEmpty()
                      where (Image.imgId <= startIndex && Image.imgId >= EndIndex && Image.userID == userID && Image.IsStatusChecked == false)
                      orderby feeds.CreatedAt descending
                      select new
                      {
                           PostImage = Image == null ? 0 : Image.ImageID,
                          Image = usrMessae==null?0: Image.userMessage,
                          createdAt = feeds == null ? DateTime.UtcNow : feeds.CreatedAt,
                          UserId = userdata == null ? 0 : userdata.userId,
                          Name = userdata == null ? " " : userdata.Name,
                          username = userdata == null ? " " : userdata.userName,
                          Email = userdata == null ? " " : userdata.emailID,
                        }).Distinct().OrderByDescending(x => x.createdAt).Take(startIndex).ToList();
   } 


        //HTML//
<div data-role="view"> 
<div>
 <ul  data-role="listview"   data-bind="foreach:ImageList">
 <li>
 <div data-bind="text:userID"></div>
 <div data-bind="text:userName"></div>
 <div data-bind="text:UserImageSrc"></div>
 <div data-bind="text:ImageId></div>
 <div data-bind="text:PostImageSrc"></div>
 <div >
 <button data-bind="click:getLoadMoreImageData">Load More</button>
 </div>
 </li>
 </ul>
 </div>
 </div>

//Knockout Js
function UserImageViewModel()
        {
            self=this;
          var lastModelValue = (self.FeedPostdata()[self.FeedPostdata().length - 1]);
          var lastPostImageId = (lastModelValue.ImageId())

         //On Load More click  last Image ID      
         self.getLoadMoreImageData=function()
         {     
           $('#loading').show();
           var UserModel = { userID:userID,ImageId:lastPostImageId}
           jQuery.support.cors = true;
           $.ajax({
            type: "POST",
            dataType: "json",
            url: serverUrl + 'api/xxx/xxx',
            data: UserModel,
            success: function (data) {
            self.ImageList($.map(data, function (item) {
                    return new ImageModel(item);
            }));},
            complete: function () {
                $('#loading').hide();
            },
            error: function (error) {
                jsonValue = jQuery.parseJSON(error.responseText);} });}}


        // On Page Load  without last Image ID  
          self.getALlUSerImage=function()
         {

            $('#loading').show();
            var UserModel = { userID: userID}
            jQuery.support.cors = true;
            $.ajax({
            type: "POST",
            dataType: "json",
            url: serverUrl + 'api/xxx/xxx',
            data: UserModel,
            success: function (data) {
            self.ImageList($.map(data, function (item) {
                    return new ImageModel(item);
            }));},
            complete: function () {
                $('#loading').hide();
            },
            error: function (error) {
                jsonValue = jQuery.parseJSON(error.responseText);} });
                }}
                }


               //Model//
              function ImageModel(item)
              {
                self.userId=ko.observable(item.userId);
                self.userName=ko.observable(item.UserName);
                self.UserImageSrc = ko.computed(function () {
                return "data:" + self.UserImageSrcType() + ";base64," + self.UserImageSrcBase64();});   

                self.ImageID=ko.observable(item.ImageId)
                self.PostImageSrc = ko.computed(function () {
                return "data:" + self.PostImageType() + ";base64," +  self.PostImageBase64();});                      
              }

           $(document).ready(function () {
           ViewModel = new UserImageViewModel();
           ko.applyBindings(ViewModel);
           }

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样?

int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);