C# Eval Expression - LINQ Dynamic - Min

LINQ Dynamic Min Examples

C# Dynamic LINQ Min examples using an Expression Evaluator.

Min - Simple

This C# example uses the LINQ Min method with a dynamic expression to get the lowest number in an array.

LINQ

private void uiMin_Simple_LINQ_Click(object sender, EventArgs e)
{
	int[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0};

	var minNum = numbers.Min();

	var sb = new StringBuilder();

	sb.AppendLine("The minimum number is {0}.", minNum);

	My.Result.Show(My.LinqResultType.Linq, uiResult, sb);
}

LINQ Execute

private void uiMin_Simple_LINQ_Execute_Click(object sender, EventArgs e)
{
	int[] numbers = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0};

	var minNum = numbers.Execute<int>("Min()");

	var sb = new StringBuilder();

	sb.AppendLine("The minimum number is {0}.", minNum);

	My.Result.Show(My.LinqResultType.LinqExecute, uiResult, sb);
}

Result

LINQ Execute Test
------------------------------
The minimum number is 0.

Min - Projection

This C# example uses the LINQ Min method with a dynamic expression to get the length of the shortest word in an array.

LINQ

private void uiMin_Projection_LINQ_Click(object sender, EventArgs e)
{
	string[] words = {"cherry", "apple", "blueberry"};

	var shortestWord = words.Min(w => w.Length);

	var sb = new StringBuilder();

	sb.AppendLine("The shortest word is {0} characters long.", shortestWord);

	My.Result.Show(My.LinqResultType.Linq, uiResult, sb);
}

LINQ Execute

private void uiMin_Projection_LINQ_Execute_Click(object sender, EventArgs e)
{
	string[] words = {"cherry", "apple", "blueberry"};

	var shortestWord = words.Execute<int>("Min(w => w.Length)");

	var sb = new StringBuilder();

	sb.AppendLine("The shortest word is {0} characters long.", shortestWord);

	My.Result.Show(My.LinqResultType.LinqExecute, uiResult, sb);
}

Result

LINQ Execute Test
------------------------------
The shortest word is 5 characters long.

Min - Grouped

This C# example uses the LINQ Min method with a dynamic expression to get the cheapest price among each category’s products.

LINQ

private void uiMin_Grouped_LINQ_Click(object sender, EventArgs e)
{
	var products = My.GetProductList();

	var categories = products.GroupBy(p => p.Category).Select(g => new {Category = g.Key, CheapestPrice = g.Min(p => p.UnitPrice)});

	var sb = new StringBuilder();

	My.ObjectDumper.Write(sb, categories);

	My.Result.Show(My.LinqResultType.Linq, uiResult, sb);
}

LINQ Execute

private void uiMin_Grouped_LINQ_Execute_Click(object sender, EventArgs e)
{
	var products = My.GetProductList();

	var categories = products.Execute("GroupBy(p => p.Category).Select(g => new { Category = g.Key, CheapestPrice = g.Min(p => p.UnitPrice) })");

	var sb = new StringBuilder();

	My.ObjectDumper.Write(sb, categories);

	My.Result.Show(My.LinqResultType.LinqExecute, uiResult, sb);
}

Result

LINQ Execute Test
------------------------------
Category=Beverages
Category=Condiments
Category=Produce
Category=Meat/Poultry
Category=Seafood
Category=Dairy Products
Category=Confections
Category=Grains/Cereals	CheapestPrice=4.5000
CheapestPrice=10.0000
CheapestPrice=10.0000
CheapestPrice=7.4500
CheapestPrice=6.0000
CheapestPrice=2.5000
CheapestPrice=9.2000
CheapestPrice=7.0000

Min - Elements

This C# example uses the LINQ Min method with a dynamic expression to get the products with the cheapest price in each category.

LINQ

private void uiMin_Elements_LINQ_Click(object sender, EventArgs e)
{
	var products = My.GetProductList();

	var categories = products.GroupBy(p => p.Category).Select(g => new {Category = g.Key, CheapestProducts = g.Where(p => p.UnitPrice == g.Min(p2 => p2.UnitPrice))});

	var sb = new StringBuilder();

	My.ObjectDumper.Write(sb, categories, 1);

	My.Result.Show(My.LinqResultType.Linq, uiResult, sb);
}

LINQ Execute

private void uiMin_Elements_LINQ_Execute_Click(object sender, EventArgs e)
{
	var products = My.GetProductList();

	var categories = products.Execute("GroupBy(p => p.Category).Select(g => new { Category = g.Key, CheapestProducts = g.Where(p => p.UnitPrice == g.Min(p2 => p2.UnitPrice)) })");

	var sb = new StringBuilder();

	My.ObjectDumper.Write(sb, categories, 1);

	My.Result.Show(My.LinqResultType.LinqExecute, uiResult, sb);
}

Result

LINQ Execute Test
------------------------------
Category=Beverages      CheapestProducts=... 
  CheapestProducts: ProductID=24  ProductName=Guaraná Fantástica  Category=Beverages      UnitPrice=4.5000        UnitsInStock=20 
Category=Condiments    CheapestProducts=... 
  CheapestProducts: ProductID=3  ProductName=Aniseed Syrup      Category=Condiments    UnitPrice=10.0000      UnitsInStock=13 
Category=Produce        CheapestProducts=... 
  CheapestProducts: ProductID=74  ProductName=Longlife Tofu      Category=Produce        UnitPrice=10.0000      UnitsInStock=4 
Category=Meat/Poultry  CheapestProducts=... 
  CheapestProducts: ProductID=54  ProductName=Tourtière  Category=Meat/Poultry  UnitPrice=7.4500        UnitsInStock=21 
Category=Seafood        CheapestProducts=... 
  CheapestProducts: ProductID=13  ProductName=Konbu      Category=Seafood        UnitPrice=6.0000        UnitsInStock=24 
Category=Dairy Products        CheapestProducts=... 
  CheapestProducts: ProductID=33  ProductName=Geitost    Category=Dairy Products        UnitPrice=2.5000        UnitsInStock=112 
Category=Confections    CheapestProducts=... 
  CheapestProducts: ProductID=19  ProductName=Teatime Chocolate Biscuits  Category=Confections    UnitPrice=9.2000        UnitsInStock=25 
Category=Grains/Cereals        CheapestProducts=... 
  CheapestProducts: ProductID=52  ProductName=Filo Mix    Category=Grains/Cereals        UnitPrice=7.0000        UnitsInStock=38