`
zhouxin464585932
  • 浏览: 80450 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

LINQ to SQL语句之Join和Order By

阅读更多

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返回值作为字段值。如图所示:

GroupJoin示意图

生成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体验,linq基础学习

    "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语句(18)之运算符转换

    在本篇内容中,我们将深入探讨LINQ to SQL语句中的运算符转换,这是理解并有效利用LINQ to SQL的关键知识点。 1. **运算符重载** 在LINQ to SQL中,查询表达式通常涉及各种算术、比较和逻辑运算符。这些运算符在C#...

    LINQ to SQL语句(15)之String

    【LINQ to SQL语句(15)之String】深入解析 LINQ(Language Integrated Query,语言集成查询)是.NET框架中的一个强大工具,它允许开发者在编程语言中直接书写查询,无需离开代码环境去编写SQL语句。在这个主题中,...

    LINQ_to_SQL语法及实例大全

    5. LINQ to SQL语句之OrderBy:OrderBy用于对数据进行排序。排序可以是简单的升序或降序,也可以结合ThenBy或ThenByDescending进行多级排序。GroupBy的带条件形式、带GroupBy形式也是本章节的关键知识点。 6. LINQ ...

    Linq to sql

    除了以上的基本操作,LINQ to SQL还支持排序(`OrderBy`, `OrderByDescending`)、分页(`Skip`和`Take`)、聚合函数(如`Sum`, `Average`, `Max`, `Min`)等。同时,你可以使用`Any`检查是否存在满足条件的记录,`...

    LINQ体验(6)——LINQtoSQL语句之Join和OrderBy[参照].pdf

    在LINQ(Language Integrated Query,语言集成查询)中,Join和OrderBy是两个非常重要的操作,它们主要用于处理数据集合之间的关联和排序。在LINQ to SQL的场景下,这两个操作可以帮助开发者更加方便地处理数据库中...

    Linq To Sql进阶

    - **表达式树(Expression Trees)**:LINQ查询的基础,表示C#或VB.NET代码的抽象语法树,可以被编译器解析为SQL语句。 - **联接查询(JOIN)**:在Linq To Sql中可以方便地实现多表联接,支持内连接、左连接、右...

    linq to sql 的重要文档

    LINQ to SQL 是 .NET Framework 提供的一个强大的数据访问技术,它允许开发者使用 C# 或 VB.NET 语言的...掌握这些LINQ to SQL语句,开发者就能高效地编写与数据库交互的代码,简化数据访问层的实现,提高开发效率。

    LINQ TO SQL实例代码

    LINQ (Language Integrated Query) to SQL 是.NET框架中的一种数据查询技术,它允许开发者使用C#或VB.NET等语言的语法直接对SQL Server数据库进行操作。这个实例代码库提供了丰富的示例,帮助开发者深入理解LINQ to ...

    c#.net Linq to sql

    其中,LINQ to SQL 是一个特定于SQL Server的ORM(对象关系映射)工具,它允许开发人员使用C#或VB.NET的查询语法直接操作数据库,而无需编写大量的SQL语句。通过这种方式,开发人员可以充分利用强类型和编译时检查的...

    LINQ to SQL语法及实例大全

    在LINQ to SQL中,这些表达式树会被转换成对应的SQL语句,然后发送到数据库执行。 **关于LINQ的技巧和好处** - 提高代码可读性和可维护性:查询表达式更接近SQL的自然语法,使得代码更容易理解。 - 强类型检查:...

    一步一步学LINQ to sql

    3. 查询表达式(Query Expressions):LINQ使用C#或VB.NET的查询语法,使代码更接近SQL语句,提高了可读性。 二、LINQ to SQL的使用步骤 1. 创建数据库模型:首先,你需要在项目中创建一个DataContext,然后将...

    Ling to sql 语句

    【Ling to SQL 语句】是.NET框架中一种强大的数据查询工具,它允许开发者使用类似于SQL的语法在对象模型上进行操作,极大地简化了...在实际的网站开发中,掌握Linq to SQL 语句对于提升代码质量和开发速度至关重要。

    linq to sql中文教程

    **LINQ to SQL**是Microsoft .NET Framework中的一个组件,它提供了一种将数据从数据库映射到内存中的对象的方式,允许开发人员使用面向对象的编程语言(如C#或VB.NET)来操作数据库,而无需编写SQL语句。...

    LINQ To SQL 语法及实例大全

    这篇文章将详细讲解LINQ to SQL的语法和实例,旨在为.NET开发者提供全面的学习资源。 ### LINQ to SQL 语句(1) - Where **Where** 是LINQ中最基础的查询操作,用于根据指定的条件筛选数据。 1. **简单形式**: `...

    Linq to Sql 循序渐进教程(详细)

    LINQ to SQL是针对关系数据库的特定实现,提供了将SQL查询语句转化为C#或VB.NET代码的能力,简化了与数据库的交互。 **二、 LINQ to SQL 的工作原理** LINQ to SQL通过ORM(对象关系映射)机制将数据库表映射为.NET...

    LINQ_TO_SQL 文档

    通过一系列文章,作者详细介绍了如何使用LINQ to SQL进行基础和高级查询操作,包括Where、Select、Distinct、Count、Sum、Min、Max、Avg、Join、Order By、Group By、Having、Exists、In、Any、All、Contains、Union...

Global site tag (gtag.js) - Google Analytics