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"]);
對於關鍵詞是不區分大小寫的,例以下面的這兩條ESQL語句是相等的。code
語句一blog
select p from Product as p
語句二教程
SELECT p FROM Product AS p
對於命名空間,是區分大小寫的,例以下面的兩條ESQL語句是不等價的。ci
語句一作用域
using NorthwindDemo select p from Product as p
語句二string
using NORTHWINDDEMO SELECT p FROM Product AS p
這是由於命名空間是區分大小區的,NorthwindDemo 和 NORTHWINDDEMO是不等價的。it
經過使用 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);
在使用 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";
標識符由字母,數字,和下劃線組成,而且第一個字符必須是字母(a-z或A-Z)。
帶引號的標識符是括在方括號([])中的任意字符序列。使用帶引號的標識符能夠指定含有在標識符中無效的字符的標識符。方括號中的全部字符都是標識符的一部分,包括全部空格。
可是,帶引號的標識符,第一個字符不能是數字,而且不能包含如下字符:
換行符
回車符
製表符
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";
若是須要,建議在查詢中指定別名,別名能夠應用於:
行構造函數
查詢語句的 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";