引用:从SQL 到 LINQ, Part 2: FROM 和 SELECT(Bill Horst)

it2023-02-06  20

引用:从SQL 到 LINQ, Part 2: FROM 和 SELECT(Bill Horst)

[原文作者]: Bill Horst

[原文链接]: Converting SQL to LINQ, Part 2: FROM and SELECT (Bill Horst)

 

在看这篇文章之前,我假定你已经读过了SQLLINQPart 1:基础

 

为了让代码示例更清晰,我修改了下列名字:

·         Customers -> CustomerTable

·         Orders -> OrderTable

·         cust -> Contact

·         CustomerName -> ContactName

·         ID -> ContactID

 

欢迎你们的任何反馈和建议,你们的意见可以使以后的文章更清晰更有用。

 

好,现在开始讨论具体的子句(clauses),我们将从最基础的FROMSELECT开始。

 

FROM

 

SQLSELECT语句由SELECT子句开始,并且紧跟着一个FROM子句。而VB查询表达式则由From子句(或者Aggregate子句,我们稍后讨论)开始。一个基本SQLFROM子句指定了一个要操作的表,一个LINQFrom子句指定了一个我们要操作的对象(CustomerTable)。这个对象可以表示“已在内存中的”(“In-Memory”)数据:比如一个SQL表,或者XML信息。因为使用这样的数据比较简单,我的例子也采用了”In-Memory”的数据。除了这个数据对象,VBFrom子句还包含了一个指定当前“行”(Contact)别名的标识符。

 

如果要选择所有的列,在SQL中我们需要使用”*”,而在VB中,我们不需要附加任何东西,From子句默认返回所有的内容。

 

SQL

SELECT *

FROM CustomerTable

 

 

VB

From Contact In CustomerTable

 

 

FROM里的别名(alias)

 

SQL允许你在FROM子句中指定一个表的别名,LINQ同样允许我们这样做。

 

SQL

SELECT Contact.CustomerID, Contact.Phone

FROM CustomerTable Contact

 

 

VB

From Contact In CustomerTable

Select Contact.CustomerID, Contact.Phone

 

 

SELECT

 

SQLSELECT语句由一个包含要select的内容的列表开始(Name, CustomerID) 类似的,LINQ也允许你指定要select的内容,并将结果包装成一个匿名类型(anonymous type)返回。你指定的内容并不一定要是From子句指定对象的一部分,你可以指定任意合法的VB表达式(比如34)。如果成员的名字不能够被推断,你必须为其指定一个别名(见下面的“SELECT里的别名”)。

 

SQL

SELECT Name, CustomerID

FROM CustomerTable

 

 

VB

From Contact In CustomerTable

Select Contact.Name, Contact.CustomerID

 

 

SELECT里的别名

 

SQL允许SELCT子句的成员有别名(ContactName, ContactID),我们可以在查询语句的其它子句中使用这些别名。LINQ也允许别名,并且你可以在所有使用这个查询结果的代码中使用它们。

 

SQL

SELECT Name ContactName, CustomerID ContactID

FROM CustomerTable

 

 

VB

From Contact In CustomerTable

Select ContactName = Contact.Name, ContactID = Contact.CustomerID

 

 

下次我打算讲到DISTINCT, WHERE, ORDER BY 和运算符。

- Bill Horst, VB IDE Test

转载于:https://www.cnblogs.com/adsiz/archive/2008/01/04/1025548.html

最新回复(0)