📅  最后修改于: 2023-12-03 15:02:41.753000             🧑  作者: Mango
在 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}");
}
以上示例中,我们首先定义了 customers
和 orders
两个列表,然后使用 LINQ 进行左外部联接查询。查询语句中,我们使用 join
关键字将两个列表连接起来,并指定连接条件为 c.Id equals o.CustomerId
,即连接条件为 customers
列表元素中的 Id
属性与 orders
列表元素中的 CustomerId
属性相等。然后使用 into
关键字将结果分组为一个列表,并使用 DefaultIfEmpty()
方法确保每个左侧数据集元素都包含在结果集中,即使右侧数据集中没有与其匹配的元素。最后使用 select
关键字选择要返回的结果集的字段,即 Name
和 o?.Total
。为了避免空引用异常,我们使用了空合并运算符 ??
,在 o?.Total
中,如果 o
为 null
,则返回 0
。
输出结果为:
John Smith - 99.99
John Smith - 149.99
Jane Doe - 49.99
Bob Johnson - 199.99
左外部联接是一种常见的查询方式,可以用于同时查询两个数据集并返回一个包含两个集合的结果集。如果你正在使用 LINQ 进行数据查询,左外部联接是一个非常有用的工具,值得一试。