Joining multiple sequences C# with Example



Joining multiple sequences C# with Example

Consider entities Customer, Purchase and PurchaseItem as follows: 
public class Customer 
{ 
public string Id { get; set } // A unique Id that identifies customer 
public string Name {get; set; } 
} 
public class Purchase 
{ 
public string Id { get; set } 
public string CustomerId {get; set; } 
public string Description { get; set; } 
} 
public class PurchaseItem 
{ 
public string Id { get; set } 
public string PurchaseId {get; set; } 
public string Detail { get; set; } 
} 
Consider following sample data for above entities: 
var customers = new List() 
{ 
new Customer() { 
Id = Guid.NewGuid().ToString(), 
Name = "Customer1" 
}, 
new Customer() { 
Id = Guid.NewGuid().ToString(), 
Name = "Customer2" 
} 
}; 
var purchases = new List() 
{ 
new Purchase() { 
Id = Guid.NewGuid().ToString(), 
CustomerId = customers[0].Id, 
Description = "Customer1-Purchase1" 
}, 
new Purchase() { 
Id = Guid.NewGuid().ToString(), 
CustomerId = customers[0].Id, 
Description = "Customer1-Purchase2" 
}, 
new Purchase() { 
Id = Guid.NewGuid().ToString(), 
CustomerId = customers[1].Id, 
Description = "Customer2-Purchase1" 
}, 
new Purchase() { 
Id = Guid.NewGuid().ToString(), 
 

CustomerId = customers[1].Id, 
Description = "Customer2-Purchase2" 
} 
}; 
var purchaseItems = new List() 
{ 
new PurchaseItem() { 
Id = Guid.NewGuid().ToString(), 
PurchaseId= purchases[0].Id, 
Detail = "Purchase1-PurchaseItem1" 
}, 
new PurchaseItem() { 
Id = Guid.NewGuid().ToString(), 
PurchaseId= purchases[1].Id, 
Detail = "Purchase2-PurchaseItem1" 
}, 
new PurchaseItem() { 
Id = Guid.NewGuid().ToString(), 
PurchaseId= purchases[1].Id, 
Detail = "Purchase2-PurchaseItem2" 
}, 
new PurchaseItem() { 
Id = Guid.NewGuid().ToString(), 
PurchaseId= purchases[3].Id, 
Detail = "Purchase3-PurchaseItem1" 
} 
}; 
Now, consider below linq query: 
var result = from c in customers 
join p in purchases on c.Id equals p.CustomerId // first join 
join pi in purchaseItems on p.Id equals pi.PurchaseId // second join 
select new 
{ 
c.Name, p.Description, pi.Detail 
}; 
To output the result of above query: 
foreach(var resultItem in result) 
{ 
Console.WriteLine($"{resultItem.Name}, {resultItem.Description}, {resultItem.Detail}"); 
} 
The output of the query would be: 
Customer1, Customer1-Purchase1, Purchase1-PurchaseItem1 
Customer1, Customer1-Purchase2, Purchase2-PurchaseItem1 
Customer1, Customer1-Purchase2, Purchase2-PurchaseItem2 
Customer2, Customer2-Purchase2, Purchase3-PurchaseItem1 
 

Live Demo on .NET Fiddle 

0 Comment's

Comment Form