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;

posted @ 2015-12-16 07:44  云之星海  阅读(198)  评论(0)    收藏  举报