Join操作
适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等。对各个表之间的关系,就用这些实现对多个表的操作。
说明:在Join操作中,分别为Join(Join查询), SelectMany(Select一对多选择)和GroupJoin(分组Join查询)。
该扩展方法对两个序列中键匹配的元素进行inner join操作
SelectMany
说明:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。1:查询语句中没有join和into,2:必须出现EntitySet。在我们表关系中有一对一关系,一对多关系,多对多关系等,下面分别介绍一下。
1.1 to Many关系:
var q =
from c in db.Customers
from o in c.Orders
where c.City == "London"
select o;
语句描述:Customers与Orders是一对多关系。即Orders在Customers类中以EntitySet形式出现。所以第二个from是从c.Orders而不是db.Orders里进行筛选。
var q =
from p in db.Products
where p.Supplier.Country == "USA" && p.UnitsInStock == 0
select p;
语句描述:这一句使用了p.Supplier.Country条件,间接关联了Supplier表。生成SQL语句为:
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID],
[t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder],
[t0].[ReorderLevel], [t0].[Discontinued]
FROM [dbo].[Products] AS [t0]
LEFT OUTER JOIN [dbo].[Suppliers] AS [t1] ON [t1].[SupplierID] = [t0].[SupplierID]
WHERE ([t1].[Country] = @p0) AND ([t0].[UnitsInStock] = @p1)
-- @p0: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [USA]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [0]
2.Many to Many关系:
var q =
from e in db.Employees
from et in e.EmployeeTerritories
where e.City == "Seattle"
select new {e.FirstName, e.LastName, et.Territory.TerritoryDescription};
说明:多对多关系一般会涉及三个表(如果有一个表是自关联的,那有可能只有2个表)。这一句语句涉及Employees, EmployeeTerritories, Territories三个表。它们的关系是1:M:1。Employees和Territories没有很明确的关系。
语句描述:这条生成SQL语句为:
SELECT [t0].[FirstName], [t0].[LastName], [t2].[TerritoryDescription]
FROM [dbo].[Employees] AS [t0]
CROSS JOIN [dbo].[EmployeeTerritories] AS [t1]
INNER JOIN [dbo].[Territories] AS [t2] ON [t2].[TerritoryID] = [t1].[TerritoryID]
WHERE ([t0].[City] = @p0) AND ([t1].[EmployeeID] = [t0].[EmployeeID])
-- @p0: Input NVarChar (Size = 7; Prec = 0; Scale = 0) [Seattle]
3.自关联关系:
var q =
from e1 in db.Employees
from e2 in e1.Employees
where e1.City == e2.City
select new {
FirstName1 = e1.FirstName, LastName1 = e1.LastName,
FirstName2 = e2.FirstName, LastName2 = e2.LastName,
e1.City
};
生成SQL语句为:
SELECT [t0].[FirstName] AS [FirstName1], [t0].[LastName] AS [LastName1], [t1].[FirstName] AS [FirstName2], [t1].[LastName] AS [LastName2], [t0].[City]
FROM [dbo].[Employees] AS [t0], [dbo].[Employees] AS [t1]
WHERE ([t0].[City] = [t1].[City]) AND ([t1].[ReportsTo] = [t0].[EmployeeID])
GroupJoin
像上面所说的,没有join和into,被翻译成SelectMany,同时有join和into时,那么就被翻译为GroupJoin。在这里into的概念是对其结果进行重新命名。
1.Two way join(两个表联合查询)
var q =
from c in db.Customers
join o in db.Orders on c.CustomerID equals o.CustomerID into orders
select new {c.ContactName, OrderCount = orders.Count()};
说明:在一对多关系中,左边是1,它每条记录为c(from c in db.Customers),右边是Many,其每条记录叫做o ( join o in db.Orders ),每对应左边的一个c,就会有一组o,那这一组o,就叫做orders,也就是说,我们把一组o命名为orders,这就是into用途。这也就是为什么在select语句中,orders可以调用聚合函数Count。在T-SQL中,使用其内嵌的T-SQL返回值作为字段值。如图所示:

生成SQL语句为:
SELECT [t0].[ContactName], (
SELECT COUNT(*)
FROM [dbo].[Orders] AS [t1]
WHERE [t0].[CustomerID] = [t1].[CustomerID]
) AS [OrderCount]
FROM [dbo].[Customers] AS [t0]
2.There way join(三个表联合查询)
分享到:
相关推荐
"LINQ体验(6)——LINQ to SQL语句之Join和Order By.docx"介绍了如何使用LINQ进行数据联接(Join)和排序(Order By)。Join操作用于合并多个数据源,而Order By则用于对查询结果进行升序或降序排列。 "LINQ体验(7)...
Linq to sql 是一种强大的数据查询语言,它可以帮助开发者快速、高效地访问和操作数据库数据。在本文中,我们将讨论 Linq to sql 的多表关联和动态条件查询这两个重要的知识点。 多表关联是指在一个查询中关联多个...
在本篇内容中,我们将深入探讨LINQ to SQL语句中的运算符转换,这是理解并有效利用LINQ to SQL的关键知识点。 1. **运算符重载** 在LINQ to SQL中,查询表达式通常涉及各种算术、比较和逻辑运算符。这些运算符在C#...
【LINQ to SQL语句(15)之String】深入解析 LINQ(Language Integrated Query,语言集成查询)是.NET框架中的一个强大工具,它允许开发者在编程语言中直接书写查询,无需离开代码环境去编写SQL语句。在这个主题中,...
5. LINQ to SQL语句之OrderBy:OrderBy用于对数据进行排序。排序可以是简单的升序或降序,也可以结合ThenBy或ThenByDescending进行多级排序。GroupBy的带条件形式、带GroupBy形式也是本章节的关键知识点。 6. LINQ ...
除了以上的基本操作,LINQ to SQL还支持排序(`OrderBy`, `OrderByDescending`)、分页(`Skip`和`Take`)、聚合函数(如`Sum`, `Average`, `Max`, `Min`)等。同时,你可以使用`Any`检查是否存在满足条件的记录,`...
在LINQ(Language Integrated Query,语言集成查询)中,Join和OrderBy是两个非常重要的操作,它们主要用于处理数据集合之间的关联和排序。在LINQ to SQL的场景下,这两个操作可以帮助开发者更加方便地处理数据库中...
- **表达式树(Expression Trees)**:LINQ查询的基础,表示C#或VB.NET代码的抽象语法树,可以被编译器解析为SQL语句。 - **联接查询(JOIN)**:在Linq To Sql中可以方便地实现多表联接,支持内连接、左连接、右...
LINQ to SQL 是 .NET Framework 提供的一个强大的数据访问技术,它允许开发者使用 C# 或 VB.NET 语言的...掌握这些LINQ to SQL语句,开发者就能高效地编写与数据库交互的代码,简化数据访问层的实现,提高开发效率。
LINQ (Language Integrated Query) to SQL 是.NET框架中的一种数据查询技术,它允许开发者使用C#或VB.NET等语言的语法直接对SQL Server数据库进行操作。这个实例代码库提供了丰富的示例,帮助开发者深入理解LINQ to ...
其中,LINQ to SQL 是一个特定于SQL Server的ORM(对象关系映射)工具,它允许开发人员使用C#或VB.NET的查询语法直接操作数据库,而无需编写大量的SQL语句。通过这种方式,开发人员可以充分利用强类型和编译时检查的...
在LINQ to SQL中,这些表达式树会被转换成对应的SQL语句,然后发送到数据库执行。 **关于LINQ的技巧和好处** - 提高代码可读性和可维护性:查询表达式更接近SQL的自然语法,使得代码更容易理解。 - 强类型检查:...
3. 查询表达式(Query Expressions):LINQ使用C#或VB.NET的查询语法,使代码更接近SQL语句,提高了可读性。 二、LINQ to SQL的使用步骤 1. 创建数据库模型:首先,你需要在项目中创建一个DataContext,然后将...
【Ling to SQL 语句】是.NET框架中一种强大的数据查询工具,它允许开发者使用类似于SQL的语法在对象模型上进行操作,极大地简化了...在实际的网站开发中,掌握Linq to SQL 语句对于提升代码质量和开发速度至关重要。
**LINQ to SQL**是Microsoft .NET Framework中的一个组件,它提供了一种将数据从数据库映射到内存中的对象的方式,允许开发人员使用面向对象的编程语言(如C#或VB.NET)来操作数据库,而无需编写SQL语句。...
这篇文章将详细讲解LINQ to SQL的语法和实例,旨在为.NET开发者提供全面的学习资源。 ### LINQ to SQL 语句(1) - Where **Where** 是LINQ中最基础的查询操作,用于根据指定的条件筛选数据。 1. **简单形式**: `...
LINQ to SQL是针对关系数据库的特定实现,提供了将SQL查询语句转化为C#或VB.NET代码的能力,简化了与数据库的交互。 **二、 LINQ to SQL 的工作原理** LINQ to SQL通过ORM(对象关系映射)机制将数据库表映射为.NET...
通过一系列文章,作者详细介绍了如何使用LINQ to SQL进行基础和高级查询操作,包括Where、Select、Distinct、Count、Sum、Min、Max、Avg、Join、Order By、Group By、Having、Exists、In、Any、All、Contains、Union...