C# mvc[3] 创建一个简单的过滤扩展方法
我们知道,我们经常要做的事就是要把我们查询出来的东西进行过滤,返回一个我们需要的子结果集
我们在前面的扩展方法中,在加入如下代码:
using System.Collections.Generic namespace MyProject.Models{ public static class MyExtensionMethods { public static decimal TotalPrice(this IEnumerable<Product> productEnum) { decimal total=0; foreach(Product prod in productEnum) { total+=prod.Price; } return total; } public static IEnumerable<Product> FilterByCategory(this IEnumerable<Product> productEnum,string cateGory) { foreach(Product prod in productEnum) { if(prod.CateGory==cateGory) { yield return prod; } } } } }
在这个"FilterByCategory"的扩展方法中采用了一个附加参数,它允许在调用方法时添加一个过滤条件,那些Category属性与该参数匹配的Product对象,将以IEnumerable<Product>形似被返回,而不匹配将被丢弃。
下面演示如何调用这个方法:
using MyProject.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MyProject.Controller{ public class HomeController:Controller{ public ViewResult Index() { IEnumerable<Product> products=new ShoppingCart{ Products=new List<Product>{ new Product{Name="Kayak",Category="Watersports",Price=275M}, new Product{Name="LiseJacket",Category="Watersports",Price=48.95M}, new Product{Name="Soccer ball",Category="Soccer",Price=19.50M}, new Product{Name="Conner flag",Category="Soccer",Price=34.95M} } }; decimal total=0; foreach(Product prod in Products.FilterByCategory("Soccer")){ total+=prod.Price; } return View("Result",(object)String.Format("Total:{0}",Total)); } } }
当调用ShoppingCart上的FilterByCategory方法时,只有Soccer分类中的那些Products被返回,运行结果为:Total:54.45;

浙公网安备 33010602011771号