引用:从SQL 到 LINQ, Part 1: 基础(Bill Horst)

引用:从SQL 到 LINQ, Part 1: 基础(Bill Horst)

[原文作者]: Bill Horst

[原文链接]: Converting SQL to LINQ, Part 1: The Basics

你可能已经知道了,VBLINQ指令允许使用类SQL语法的查询。LINQ的语法并不和SQL的语法完全一致,所以如果你现在已经在用SQL或者熟悉SQL查询的话,你可能会想把已经存在的SQL查询转化为LINQ

这篇文章就是“从SQLLINQ”系列的第一篇。在这篇文章里,我想让大家对SQLLINQ的区别有一个基本的理解,下次我们会涉及到具体的语言架构。

 

假定

 

在接下来的例子, SQL代码会涉及到两个tableCustomersOrdersVB代码会用到与之同名的两个对象,他们的类型分别是IEnumerable(Of Customer)IEnumerable(Of Order)。我还会用到两个类,同样是CustomerOrder,如下:

Class Customer

    Public CustomerID As Integer

    Public Name As String

    Public Phone As String

    Public Address As String

    Public City As String

    Public State As String

    Public Zip As String

End Class

 

Class Order

    Public OrderID As Integer

    Public CustomerID As Integer

    Public Cost As Single

    Public Phone As String

    Public OrderDate As DateTime

    Public ShippingZip As String

    Public ItemName As String

End Class

 

基本语法

 

LINQ支持SQL SELECT语句,而不支持其他的,比如CREATE, INSERT, UPDATE DELETE。你可以认为SQL SELECT语句的基本语法是一系列的“子句”(clauses),其中的第一个是SELECT子句。

sqlSelectClause [ sqlClause1 [ sqlClause2 [ ... ] ] ]

 

SQL的语法可能根据不同的版本有所差异,下面是一个例子:

SQL

SELECT Name CustomerName, CustomerID ID

FROM Customers

ORDER BY ID

 

VB LINQ表达式的基本语法也是一系列的子句,不同的是第一个是From子句(或者Aggregate子句,我们稍后会讨论)。

linqFromClause [ linqClause1 [ linqClause2 [ ... ] ] ]

 

比如:

VB

From cust In Customers _

Select CustomerName = cust.Name, ID = cust.CustomerID _

Order By ID

 

我刚才用了“VB LINQ表达式”的说法是因为前面的“LINQ查询”不是一个完整的语句。虽然SQL语句可以单独出现,但是LINQ查询在语法上和表达式“3 * 4”一样 - 它不是一个完整的语句,所以我们要使它完整。一个VB的完整的LINQ查询的语句看起来像这样:

VB

Dim SortedCustomers = From cust In Customers _

                      Select CustomerName = cust.Name, ID = cust.CustomerID _

                      Order By ID

 

从概念上说,LINQ查询的每个子句操作的都是IEnumerable(Of T)类型并且返回的也是IEnumerable(Of T)类型”(其中的两个T并不一定要相同)。查询子句和SQL子句是基本类似的(比如SELECT, ORDER BY),所以你可以一个子句一个子句地将SQL查询转化成LINQ。在上面的例子里,这些子句出现的顺序稍有不同,而且有些语法上的差异,但是你可以看到,他们非常类似。

还要注意的一点是,SQL语法允许在子句间直接换行,而在VB里,换行需要在每行最后加上下划线(_)去告诉编译器下一行仍然是当前的表达式。

这篇文章只是一个泛泛的说明,但我会在以后讲到更为具体的内容。我打算涉及以下条目:

  • FROM and SELECT
  • DISTINCT, WHERE, ORDER BY, Operators
  • Functions (Scalar and Aggregate)
  • GROUP By and HAVING
  • Joins
  • UNION , TOP and Subqueries
- Bill Horst, VB IDE Test

你可能感兴趣的:(LINQ)