C#: How to Join Two List Using Lambdas Expression

Joining two Lists using Lambdas expression is very simple, lets say we have a inventory of computer products and we have a bunch of purchase orders to process.

So what I am going to do to demonstrate this is to create a class called Product that will have a string property for storing the product’s name and a decimal property for storing the unit price and a property for the product’s id.

	
public class Product
{
	public int Id {
		get;
		set;
	}
	public string Name {
		get;
		set;
	}
	public decimal UnitPrice {
		get;
		set;
	}
}

Then I create a class called Order that will have a property for the order number as a string, product id as an integer and quantity as a decimal.

public class Order
{
	public int ProductId {
		get;
		set;
	}
	public string Number {
		get;
		set;
	}
	public int Quantity {
		get;
		set;
	}
}

So now I have my classes created I will create a List of products and orders with values. For the Join to work, both lists must have a common reference, and that reference is the Product’s Id.

List<Product> products = new List<Product> {
	new Product { Id = 1, Name = "1TB SSD Drive", UnitPrice = 99 },
	new Product { Id = 2, Name = "Keyboard", UnitPrice = 39.95M },
	new Product { Id = 3, Name = "24 inch Monitor", UnitPrice = 124.99M }
};

As you can see below each order has a referece to a Product Id and a product can 0 to many orders.

List<Order> orders = new List<Order> {
	new Order { Number = "A100", ProductId = 2,  Quantity = 100 },
	new Order { Number = "QZ123", ProductId = 1, Quantity = 10 },
	new Order { Number = "1234", ProductId = 2, Quantity = 55 }
};

To join these two list you would use the Lambdas Join expression. Below I query the orders list and join it with the products list by the order’s ProductId and the product’s Id. Then I return each result with a custom object with all the values in it.

var results = orders.Join (products, o => o.ProductId, p => p.Id, ((o, p) => new { 
	ProductName = p.Name,
	UnitPrice = p.UnitPrice,
	Number = o.Number,
	Quantity = o.Quantity,
	TotalCost = p.UnitPrice * o.Quantity
})); 

To see the finishing result I write a foreach on the results and output the values to the console.

foreach (var order in results) {
	Console.WriteLine ("Order No: {0}, Product: {1}, Qty: {2}, Unit Price: {3}, Total Cost: {4}", order.Number, order.ProductName, order.Quantity, order.UnitPrice, order.TotalCost);
}

C#: Joining an Array of Elements Into One Single String

If you need to convert an array to singe delimited string it is easy to do. Below is an example C# code to demonstrate how to join an array of integer values into a single delimited string:

using System;

namespace JoinArrayElements
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			int[] numbers = new int[] { 1,2,3,4 };

			foreach (int num in numbers)
			{
				Console.WriteLine(num);
			}

			var strJoined = string.Join(",", Array.ConvertAll(numbers, Convert.ToString));

			Console.WriteLine ("Joined Integer Array as a Single String: {0}", strJoined);
		}
	}
}

I am using the string.Join() to join my array, the first parameter would be the delimiter character for this example I am using the comma “,”. Then the second parameter is the array that contains all the elements, but this parameter only takes an array of string. Okay we can fix this by converting the array of integers to an array of strings, by using the Array.ConvertAll() method and passing the array values to be converted and set the data type to convert to. (more…)

Shares