📜  LINQ左外部联接(1)

📅  最后修改于: 2023-12-03 15:02:41.753000             🧑  作者: Mango

LINQ 左外部联接

在 LINQ 中,左外部联接(left outer join)是一种常用的查询方式,可以用于同时查询两个数据集并返回一个包含两个集合的结果集,其中左侧数据集的所有元素都包含在结果集中,而右侧数据集只包含与左侧数据集中的元素匹配的元素。

示例

以下示例演示了如何使用 LINQ 进行左外部联接查询:

var customers = new List<Customer>
{
    new Customer { Id = 1, Name = "John Smith", City = "New York" },
    new Customer { Id = 2, Name = "Jane Doe", City = "Chicago" },
    new Customer { Id = 3, Name = "Bob Johnson", City = "Los Angeles" },
};

var orders = new List<Order>
{
    new Order { Id = 1, CustomerId = 1, Total = 99.99 },
    new Order { Id = 2, CustomerId = 2, Total = 49.99 },
    new Order { Id = 3, CustomerId = 1, Total = 149.99 },
    new Order { Id = 4, CustomerId = 3, Total = 199.99 },
};

var query = from c in customers
            join o in orders
            on c.Id equals o.CustomerId into g
            from o in g.DefaultIfEmpty()
            select new { c.Name, o?.Total };

foreach (var result in query)
{
    Console.WriteLine($"{result.Name} - {result.Total ?? 0}");
}

以上示例中,我们首先定义了 customersorders 两个列表,然后使用 LINQ 进行左外部联接查询。查询语句中,我们使用 join 关键字将两个列表连接起来,并指定连接条件为 c.Id equals o.CustomerId,即连接条件为 customers 列表元素中的 Id 属性与 orders 列表元素中的 CustomerId 属性相等。然后使用 into 关键字将结果分组为一个列表,并使用 DefaultIfEmpty() 方法确保每个左侧数据集元素都包含在结果集中,即使右侧数据集中没有与其匹配的元素。最后使用 select 关键字选择要返回的结果集的字段,即 Nameo?.Total。为了避免空引用异常,我们使用了空合并运算符 ??,在 o?.Total 中,如果 onull,则返回 0

输出结果为:

John Smith - 99.99
John Smith - 149.99
Jane Doe - 49.99
Bob Johnson - 199.99
总结

左外部联接是一种常见的查询方式,可以用于同时查询两个数据集并返回一个包含两个集合的结果集。如果你正在使用 LINQ 进行数据查询,左外部联接是一个非常有用的工具,值得一试。