diff --git a/LanguageFeatures/Controllers/HomeController.cs b/LanguageFeatures/Controllers/HomeController.cs index 2d66350..c859cd0 100644 --- a/LanguageFeatures/Controllers/HomeController.cs +++ b/LanguageFeatures/Controllers/HomeController.cs @@ -65,7 +65,34 @@ namespace LanguageFeatures.Controllers decimal cartTotal = cart.TotalPrices(); return View("Result", (object)string.Format("Total: {0:c}", cartTotal)); + } + public ViewResult UseFilterExtensionMethon() + { + IEnumerable products = new ShoppingCart + { + Products = new List + { + new Product {Name = "Kayak", Category = "Watersports", Price = 275M }, + new Product {Name = "Lifejacket", Category = "Watersports", Price = 48.95M}, + new Product {Name = "Soccer ball", Category = "Soccer", Price = 19.50M }, + new Product {Name = "Coner flag", Category = "Soccer", Price = 34.95M } + } + }; + + Func categoryFileter = delegate (Product prod) + { + return prod.Category == "Soccer"; + }; + + decimal total = 0; + + foreach (Product prod in products.Filter(categoryFileter)) + { + total += prod.Price; + } + + return View("Result", (object)String.Format("Total: {0}", total)); } } } \ No newline at end of file diff --git a/LanguageFeatures/Models/MyExtensionMethods.cs b/LanguageFeatures/Models/MyExtensionMethods.cs index 83f597f..06640f8 100644 --- a/LanguageFeatures/Models/MyExtensionMethods.cs +++ b/LanguageFeatures/Models/MyExtensionMethods.cs @@ -16,5 +16,27 @@ namespace LanguageFeatures.Models } return total; } + + public static IEnumerable FilterByCategory(this IEnumerable productEnum, string categoryParam) + { + foreach (Product prod in productEnum) + { + if (prod.Category == categoryParam) + { + yield return prod; + } + } + } + + public static IEnumerable Filter(this IEnumerable productEnum, Func selectorParm) + { + foreach (Product prod in productEnum) + { + if (selectorParm(prod)) + { + yield return prod; + } + } + } } } \ No newline at end of file diff --git a/LanguageFeatures/Views/Home/Result.cshtml b/LanguageFeatures/Views/Home/Result.cshtml index dc0c1da..b5dd30c 100644 --- a/LanguageFeatures/Views/Home/Result.cshtml +++ b/LanguageFeatures/Views/Home/Result.cshtml @@ -1,4 +1,4 @@ - +@Model String @{ Layout = null; }