[原文作者]: Bill Horst
[原文链接]: Converting SQL to LINQ, Part 2: FROM and SELECT (Bill Horst)
在看这篇文章之前,我假定你已经读过了从SQL到LINQ,Part 1:基础。
为了让代码示例更清晰,我修改了下列名字:
· Customers -> CustomerTable
· Orders -> OrderTable
· cust -> Contact
· CustomerName -> ContactName
· ID -> ContactID
欢迎你们的任何反馈和建议,你们的意见可以使以后的文章更清晰更有用。
好,现在开始讨论具体的子句(clauses),我们将从最基础的FROM和SELECT开始。
FROM
SQL的SELECT语句由SELECT子句开始,并且紧跟着一个FROM子句。而VB查询表达式则由From子句(或者Aggregate子句,我们稍后讨论)开始。一个基本SQL的FROM子句指定了一个要操作的表,一个LINQ的From子句指定了一个我们要操作的对象(CustomerTable)。这个对象可以表示“已在内存中的”(“In-Memory”)数据:比如一个SQL表,或者XML信息。因为使用这样的数据比较简单,我的例子也采用了”In-Memory”的数据。除了这个数据对象,VB的From子句还包含了一个指定当前“行”(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
SQL的SELECT语句由一个包含要select的内容的列表开始(Name, CustomerID)。 类似的,LINQ也允许你指定要select的内容,并将结果包装成一个匿名类型(anonymous type)返回。你指定的内容并不一定要是From子句指定对象的一部分,你可以指定任意合法的VB表达式(比如3+4)。如果成员的名字不能够被推断,你必须为其指定一个别名(见下面的“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