ALinq Dynamic 使用指南——慨述(上)

一.使用

1.程序集與命名空間的引用
使用 ALinq Dynamic,你須要引用ALinq.Dynamic.dll(ALinq用戶)或者System.Data.Linq.Dynamic.dll (Linq to SQL用戶),在使用時,還須要引入ALinq.Dynamic命名空間。固然,使用前你還須要完成建模的工做,本文假設你已經會了,不然請參考Linq to SQL或ALinq教程。sql

示例一

下面的示例,因爲使用到dynamic關鍵字,必須運行在.NET Framework4或以上。函數

using System;
using ALinq.Dynamic;
using NorthwindDemo;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var db = new NorthwindDataContext();
            var q = db.CreateQuery("select e.FirstName, e.LastName from Employees as e");
            foreach (var item in q)
            {
                var e = item as dynamic;
                Console.WriteLine("{0} {1}", e.FirstName, e.LastName);
            }
        }
    }
}

示例二

下面的示例能夠運行在.NET Framework 3.5(爲了便於閱讀以及節省編幅,僅給出關鍵部份代碼)。spa

var db = new NorthwindDataContext();
var q = db.CreateQuery<IDataRecord>("select e.FirstName, e.LastName from Employees as e");
foreach (var e in q)
    Console.WriteLine("{0} {1}", e["FirstName"], e["LastName"]);

二.大小敏感

1.關鍵詞不區分大小寫

對於關鍵詞是不區分大小寫的,例以下面的這兩條ESQL語句是相等的。code

語句一blog

select p from Product as p

語句二教程

SELECT p FROM Product AS p

2.命名空間區分大小寫

對於命名空間,是區分大小寫的,例以下面的兩條ESQL語句是不等價的。ci

語句一作用域

using NorthwindDemo 
select p from Product as p

語句二string

using NORTHWINDDEMO
SELECT p FROM Product AS p

這是由於命名空間是區分大小區的,NorthwindDemo 和 NORTHWINDDEMO是不等價的。it

三.命名空間

1.using 關鍵字

經過使用 using 關鍵字,能夠引入命名空間,避免使用全局標識。例如:

var esql = @"using NorthwindDemo;
             select e.FirstName, e.LastName 
             from Employee as e";
var q1 = db.CreateQuery(esql);

其等效於:

var esql = @"select e.FirstName, e.LastName 
             from NorthwindDemo.Employee as e";
var q1 = db.CreateQuery(esql);

2.默認引用的命名空間

在使用 CreateQuery 方法進行查詢的時候,ALinq Dynamic 會自動引入 DataContext 所在的命名空間。例如:

var db = new NorthwindDemo.NorthwindDataContext();
var esql = "select e.FirstName, e.LastName from Employee as e";

因爲 DataContext ,即 db 變量,對應的實體類命名空間爲 NorthwindDemo, esql 語句會自動引入 NothwindDemo 命名空間,即等效於下面的語句:

var db = new NorthwindDemo.NorthwindDataContext();
var esql = @"using NorthwindDemo;
             select e.FirstName, e.LastName from Employee as e";

四.標識符

1.簡單標識符

標識符由字母,數字,和下劃線組成,而且第一個字符必須是字母(a-z或A-Z)。

2.帶引號的標識符

帶引號的標識符是括在方括號([])中的任意字符序列。使用帶引號的標識符能夠指定含有在標識符中無效的字符的標識符。方括號中的全部字符都是標識符的一部分,包括全部空格。
可是,帶引號的標識符,第一個字符不能是數字,而且不能包含如下字符:

換行符
回車符
製表符
Backspace
額外的方括號(即括起標識符的方括號中的方括號)。
單引號(即:')
雙引號(即:")

使用帶引號的標識符能夠建立在標識符中無效的屬性名稱字符,以下面的示例所示:

var esql = "select c.ContactName as [Contact Name] from Customers as c";
var q = db.CreateQuery(esql).Execute();

使用帶引號的標識符,還能夠指定關鍵字做爲標識符。例如,若是類型 Email 具備名爲「From」的屬性,則可使用方括號來消除與保留關鍵字「FROM」的歧義,以下所示:

var esql = "select e.[From] from Emails AS e";

可是下面的例子是非法的
標識符中帶引號

var esql = "select c.ContactName as ['Contact Name'] from Customers as c";

標識符以數字開始

var esql = "select c.ContactName as [0ContactName] from Customers as c";

3.別名規則

若是須要,建議在查詢中指定別名,別名能夠應用於:

行構造函數
查詢語句的 FROM 子句
查詢語句的 SELECT 子句
查詢語句的 GROUP BY 子句

有效的別名
有效的別外包括簡單標識符或者帶引號的標識符

五.參數

參數是查詢語句以外定義的變量,參數名在查詢語句中定義,並以(@)符號做爲前綴。這能夠將它們與屬性名或查詢中定義的其它名稱區分開來。參數爲兩類,命名參數和順序參數,對於命名參數,必須指名稱,參數的傳遞不要按照順序。順序參數不須要指定名稱,在查詢語句中使用序號(序號從0開始)做爲參數名,參數必須按順序傳遞。

命名參數

var esql = @"select e from Employees as e
         where e.FirstName = @f and e.LastName = @l";
var q = db.CreateQuery(esql, new ObjectParameter("l", "mak"), new ObjectParameter("f", "mike"));

順序參數

var esql = @"select e from Employees as e
         where e.FirstName = @0 and e.LastName = @1";
var q = db.CreateQuery(esql, "mike", "mak");

六.變量

變量表達式是對當前做用域中定義的命名錶達式的引用。變量引用必須是有效的標識符。
如下示例演示如何在查詢語句中使用變量。FROM 子句中的 c 是變量定義。在 SELECT 子句中使用的 c 表示變量引用。

var esql = "select c.ContactName from Customers as c";
相關文章
相關標籤/搜索