Regex Test

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	public static void Main()
	{
		List<Customer> customers = new List<Customer>() { new Customer() { Name = "Jan", Surname = "Tichy", OrderedProduct = new Product[] { new Product() { ProductCategory = Product.Category.Food, ProductName = "Neco k jidlu" }, new Product() { ProductCategory = Product.Category.Pets, ProductName = "Neco pro psa" }, new Product() { ProductCategory = Product.Category.Pets, ProductName = "Neco pro rybicky" } } }, new Customer() { Name = "Zuzana", Surname = "Mala", OrderedProduct = new Product[] { new Product() { ProductCategory = Product.Category.Pets, ProductName = "Neco pro kocku" } } } };
		
		var groupProductQuery = from Customer c in customers
										 from Product p in c.OrderedProduct
										 group p by p.ProductCategory into ProductGroup
										 select new {
											 ProductID = ProductGroup.Key,
											 CustomerList = (from Customer c in customers
															 from Product p in c.OrderedProduct
															 where p.ProductCategory == ProductGroup.Key
															 select new { Surname = c.Surname }).ToList()
										 };

		 Console.WriteLine("Query 5 >>>");
		 foreach (var gpq in groupProductQuery) {
			 Console.WriteLine("Category: {0}", gpq.ProductID);
			 foreach (var cust in gpq.CustomerList) {
				 Console.WriteLine("  {0}", cust.Surname);
			 }
		 }
		
		Console.WriteLine("\n---\n");

		foreach (var category in Enum.GetNames(typeof(Product.Category)))
		{
			Console.WriteLine("Category: " + category);
			foreach (var cust in customers.Where(c => c.OrderedProduct.Select(p => p.ProductCategory.ToString()).Contains(category)))
				Console.WriteLine("\t" + cust.Surname);
		}

		Console.WriteLine("\n---\n");

		foreach (var category in Enum.GetValues(typeof(Product.Category)).Cast<Product.Category>())
		{
			Console.WriteLine("Category: " + category.ToString());
			foreach (var cust in customers.Where(c => c.OrderedProduct.Select(p => p.ProductCategory).Contains(category)))
				Console.WriteLine("\t" + cust.Surname);
		}
		
		Console.WriteLine("\n---\n");
		
		var categories = Enum.GetNames(typeof(Product.Category)).Select(n => new { Name = n, Customers = customers.Where(c => c.OrderedProduct.Select(p => p.ProductCategory.ToString()).Contains(n)) });
		//var categories = Enum.GetValues(typeof(Product.Category)).Cast<Product.Category>().Select(v => new { Name = v.ToString(), Customers = customers.Where(c => c.OrderedProduct.Select(p => p.ProductCategory).Contains(v)) });
		foreach (var category in categories)
		{
			Console.WriteLine("Category: " + category.Name);
			foreach (var cust in category.Customers)
				Console.WriteLine("\t" + cust.Surname);
		}
		
		Console.WriteLine("\n---\n");
		
		Console.WriteLine(String.Join("\n", Enum.GetValues(typeof(Product.Category)).Cast<Product.Category>().Select(pc => "Category: " + pc.ToString() + "\n" + String.Join("\n", customers.Where(c => c.OrderedProduct.Select(p => p.ProductCategory).Contains(pc)).Select(c => "\t" + c.Surname)))));
	}
}

public class Product
{
	public enum Category
	{
		Food = 0,
		Pets = 1,
		Toys = 2
	}
	public string ProductName { get; set; }
	public Category ProductCategory { get; set; }
}
public class Customer
{
	public string Name { get; set; }
	public string Surname { get; set; }
	public Product[] OrderedProduct { get; set; }
}
;