这个操作使用LINQ to SQL到数据库获取一页产品信息。该实现返回一个包含ProductData类型的ProductGroupingData 类型。我这样做的原因在于我不仅需要返回产品信息(ProductData),还需要一些有助于分页的元数据(StartIndex, PageSizebut 和ProductGrouping的TotalCount)。 下面就是这些类型:
[DataContract]
public class ProductData
{
[DataMember]
public int ProductId;
[DataMember]
public string ProductName;
[DataMember]
public string Description;
[DataMember]
public decimal Price;
[DataMember]
public string ProductImage;
}
[DataContract]
public class ProductGroupingData
{
[DataMember]
public List<ProductData> Products;
[DataMember]
public int StartIndex;
[DataMember]
public int PageSize;
[DataMember]
public int TotalCount = 0;
}
public class ProductData
{
[DataMember]
public int ProductId;
[DataMember]
public string ProductName;
[DataMember]
public string Description;
[DataMember]
public decimal Price;
[DataMember]
public string ProductImage;
}
[DataContract]
public class ProductGroupingData
{
[DataMember]
public List<ProductData> Products;
[DataMember]
public int StartIndex;
[DataMember]
public int PageSize;
[DataMember]
public int TotalCount = 0;
}
以下是实现代码:
[OperationContract]
public ProductGroupingData GetProductGrouping(int startIndex, int pageSize)
{
using (CatalogDataContext catalogCtx = new CatalogDataContext())
{
// Set up the query
var products = from p in catalogCtx.Products
orderby p.ProductName
select new ProductData()
{
ProductId = p.ProductId,
ProductName = p.ProductName,
Description = p.ProductDescription,
Price = p.Price,
ProductImage = p.ProductImage
};
// Use skip and take extension methods for server side paging
// and call ToList to execute the query
var productColl = products.Skip(startIndex).Take(pageSize).ToList();
// Add the metadata
var package = new ProductGroupingData()
{
Products = productColl,
StartIndex = startIndex,
PageSize = pageSize,
TotalCount = catalogCtx.Products.Count()
};
return package;
}
public ProductGroupingData GetProductGrouping(int startIndex, int pageSize)
{
using (CatalogDataContext catalogCtx = new CatalogDataContext())
{
// Set up the query
var products = from p in catalogCtx.Products
orderby p.ProductName
select new ProductData()
{
ProductId = p.ProductId,
ProductName = p.ProductName,
Description = p.ProductDescription,
Price = p.Price,
ProductImage = p.ProductImage
};
// Use skip and take extension methods for server side paging
// and call ToList to execute the query
var productColl = products.Skip(startIndex).Take(pageSize).ToList();
// Add the metadata
var package = new ProductGroupingData()
{
Products = productColl,
StartIndex = startIndex,
PageSize = pageSize,
TotalCount = catalogCtx.Products.Count()
};
return package;
}
到这里,我们已经创建好了一个支持AJAX的服务。一个服务支持AJAX,就是说该服务可以非常容易地被一个 AJAX 客户端调用。接下来的 WCF中的REST架构 三,我就讨论如何在客户端调用服务.