📜  linq 内连接 - C# (1)

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

LINQ 内连接简介 - C#

LINQ 全称 Language Integrated Query,是 C# 编程语言中一种用于处理数据的技术。其中,内连接是一项非常重要的操作,它允许我们将两个或多个数据集合中的内容合并在一起,以获取所需的结果。

内连接的概念

内连接(Inner Join)是 SQL 中的一个概念,在 Linq 中也被广泛使用,正如其名,内连接就是将两个数据源中公共的部分连接起来。具体地说,内连接是指只选择两个数据集合中共有的部分作为查询结果,而不包括其他部分。

在 Linq 中,我们可以使用 Join 和关联子句(from a in A join b in B on a.property equals b.property)实现内连接操作。下面是一个简单的示例:

class Program
{
    static void Main(string[] args)
    {
        var company = new List<Company>
        {
            new Company { Id = 1, Name = "Google" },
            new Company { Id = 2, Name = "Apple" },
            new Company { Id = 3, Name = "Microsoft" }
        };

        var employee = new List<Employee>
        {
            new Employee { Id = 1, Name = "Steve Jobs", CompanyId = 2 },
            new Employee { Id = 2, Name = "Bill Gates", CompanyId = 3 },
            new Employee { Id = 3, Name = "Sundar Pichai", CompanyId = 1 },
            new Employee { Id = 4, Name = "Satya Nadella", CompanyId = 3 }
        };

        var result = company.Join(
            employee,
            c => c.Id,
            e => e.CompanyId,
            (c, e) => new
            {
                CompanyName = c.Name,
                EmployeeName = e.Name
            }
        );

        foreach (var item in result)
        {
            Console.WriteLine($"公司:{item.CompanyName},员工:{item.EmployeeName}");
        }
    }
}

public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CompanyId { get; set; }
}

代码执行的结果是:

公司:Google,员工:Sundar Pichai
公司:Apple,员工:Steve Jobs
公司:Microsoft,员工:Bill Gates
公司:Microsoft,员工:Satya Nadella
Join 和关联子句的作用

Join 方法和关联子句 (join ... on ...) 本质上是相同的,它们都用来连接两个数据源中的公共部分。下面分别介绍一下它们的用法。

Join 方法

Join 方法使用方式如下:

public static IEnumerable<TResult> Join<TOuter,TInner,TKey,TResult>(
    this IEnumerable<TOuter> outer,
    IEnumerable<TInner> inner,
    Func<TOuter,TKey> outerKeySelector,
    Func<TInner,TKey> innerKeySelector,
    Func<TOuter,TInner,TResult> resultSelector
)

参数含义:

  • outer:要连接的第一个数据源。
  • inner:要连接的第二个数据源。
  • outerKeySelector:用于从第一个数据源中选择连接键的函数。
  • innerKeySelector:用于从第二个数据源中选择连接键的函数。
  • resultSelector:用于从两个匹配元素中创建结果元素的函数。
关联子句

关联子句的使用方式如下:

from OUTERTYPE o in OUTERSEQUENCE
join INNERTYPE i in INNERSEQUENCE
on o.OUTERKEY equals i.INNERKEY
select new { ... }

其中参数含义与 Join 方法相同。

总结

通过本文的介绍,我们了解了 Linq 中内连接的概念以及常用的用法。在实际编程中,我们可以根据具体的需求选择使用 Join 方法或关联子句进行内连接操作,以便获取所需的结果。