[英]Passing multiple parameters to controller in ASP.NET MVC; also, generating on-the-fly queries in LINQ-to-SQL
[英]Paging using Linq-To-Sql based on two parameters in asp.net mvc
作為兩個參數我說currentPage
和pagesize
.....我到目前為止使用sql server存儲過程並實現這樣的分頁,
GO
ALTER PROCEDURE [dbo].[GetMaterialsInView]
-- Add the parameters for the stored procedure here
@CurrentPage INT,
@PageSize INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT *,ROW_NUMBER() OVER (ORDER BY Id) AS Row FROM
(
SELECT
*,ROW_NUMBER() OVER (ORDER BY Id) AS Row
FROM InTimePagingView
) AS InTimePages
WHERE Row >= (@CurrentPage - 1) * @PageSize + 1 AND Row <= @CurrentPage*@PageSize
SELECT COUNT(*) as TotalCount FROM InTimePagingView
SELECT CEILING(COUNT(*) / CAST(@PageSize AS FLOAT)) NumberOfPages
FROM InTimePagingView
END
現在我使用Linq-to-sql並使用它,
public IQueryable<MaterialsObj> FindAllMaterials()
{
var materials = from m in db.Materials
join Mt in db.MeasurementTypes on m.MeasurementTypeId equals Mt.Id
where m.Is_Deleted == 0
select new MaterialsObj()
{
Id = Convert.ToInt64(m.Mat_id),
Mat_Name = m.Mat_Name,
Mes_Name = Mt.Name,
};
return materials;
}
現在我想返回records,TotalCount
,我使用總計數生成頁面數.....這可能......任何建議......
編輯:
剛發現這個......
NorthWindDataContext db = new NorthWindDataContext();
var query = from c in db.Customers
select c.CompanyName;
//Assuming Page Number = 2, Page Size = 10
int iPageNum = 2;
int iPageSize = 10;
var PagedData = query.Skip((iPageNum - 1) * iPageSize).Take(iPageSize);
ObjectDumper.Write(PagedData);
你可以使用IQueryable.Skip(),. Take()和.Count()“手動”完成它,或者你可以使用這個方便的模式: -
public class PagedList<T> : List<T>
{
public PagedList(IEnumerable<T> source, int index, int pageSize)
{
this.TotalCount = source.Count();
this.PageSize = pageSize;
this.PageIndex = index;
this.AddRange(source.Skip(index * pageSize).Take(pageSize).ToList());
}
public int TotalCount { get; set; }
public int PageIndex { get; set; }
public int PageSize { get; set; }
public bool HasPreviousPage
{
get
{
return (PageIndex > 0);
}
}
public bool HasNextPage
{
get
{
return ((PageIndex + 1) * PageSize) < TotalCount;
}
}
}
像這樣使用它: -
public ActionResult Materials(int page)
{
var materials = MaterialsRepository.FindAllMaterials();
var results = new PagedList<MaterialsObj>(materials, page - 1, 10);
return new View(results)
}
互聯網上有很多實現,包括助手和測試以及所有爵士樂。 我認為ScottGu提出了原始代碼,但不要引用我的話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.