Chapter 9. LINQ Operators
This chapter describes each of the LINQ query operators. As well as serving as a reference, two of the sections, “Projecting” and “Joining”, cover a number of conceptual areas:
-
Projecting object hierarchies
-
Joining with
Select
,SelectMany
,Join
, andGroupJoin
-
Query expressions with multiple range variables
All of the examples in this chapter assume that a names
array is defined as follows:
string[] names = { "Tom", "Dick", "Harry", "Mary", "Jay" };
Examples that query a database assume that a variable called dbContext
is instantiated as
var dbContext = new NutshellContext();
where NutshellContext
is defined as follows:
public class NutshellContext : DbContext { public DbSet<Customer> Customers { get; set; } public DbSet<Purchase> Purchases { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Customer>(entity => { entity.ToTable("Customer"); entity.Property(e => e.Name).IsRequired(); // Column is not nullable }); modelBuilder.Entity<Purchase>(entity => { entity.ToTable("Purchase"); entity.Property(e => e.Date).IsRequired(); entity.Property(e => e.Description).IsRequired(); }); } } public class Customer { public int ID { get; set; } public string Name { get; set; } public virtual List<Purchase> Purchases { get; set; } = new List<Purchase>(); } public class Purchase { public int ID { get; set; } public int? CustomerID { get; set; } public DateTime Date { get; set; } public string Description { ...
Get C# 9.0 in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.