一.使用

1.程序集与命名空间的引用
使用 ALinq Dynamic,你需要引用ALinq.Dynamic.dll(ALinq用户)或者System.Data.Linq.Dynamic.dll (Linq to SQL用户),在使用时,还需要引入ALinq.Dynamic命名空间。当然,使用前你还需要完成建模的工作,本文假设你已经会了,否则请参考Linq to SQL或ALinq教程。

示例一

下面的示例,由于使用到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(为了便于阅读以及节省编幅,仅给出关键部份代码)。

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语句是相等的。

语句一

select p from Product as p

语句二

SELECT p FROM Product AS p

2.命名空间区分大小写

对于命名空间,是区分大小写的,例如下面的两条ESQL语句是不等价的。

语句一

using NorthwindDemo
select p from Product as p

语句二

using NORTHWINDDEMO
SELECT p FROM Product AS p

这是因为命名空间是区分大小区的,NorthwindDemo 和 NORTHWINDDEMO是不等价的。

三.命名空间

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";

ALinq Dynamic 使用指南——慨述(上)的更多相关文章

  1. ALinq Dynamic 使用指南——代码的获取与编译

    1.下载代码 ALinq Dynamic 项目托管在 CodePlex 网站,你可以使用浏览器下载压缩包,或者通过 SVN 获取. 项目网址:http://esql.codeplex.com/ 压缩包 ...

  2. ALinq Dynamic 使用指南——前言

    一.简介 ALinq Dynamic 为ALinq以及Linq to SQL提供了一个Entiy SQL的查询接口,使得它们能够应用Entity SQL 进行数据的查询.它的原理是将Entiy SQL ...

  3. Oracle PL/SQL入门之慨述

    Oracle PL/SQL入门之慨述 一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言( ...

  4. 《Velocity java开发指南》中文版(上)转载

    文章引自:http://sakyone.iteye.com/blog/524289 1.开始入门 Velocity是一基于java语言的模板引擎,使用这个简单.功能强大的开发工具,可以很容易的将数据对 ...

  5. DirectShow开发快速入门之慨述

    摘要:本篇文档概括性的介绍了DirectShow的主要组成部分,以及一些Directshow的基本概念.熟悉这些基本的知识对于Directshow的应用开发或者过滤器的开发者都会有所帮助. Direc ...

  6. 浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject

    http://www.cnblogs.com/LoveJenny/archive/2011/07/05/2098578.html ExpandoObject:表示一个对象,该对象包含可在运行时动态添加 ...

  7. C# 接口慨述

    接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).接口可以从多个基接口继承,而类或结构可以实现多个接口.接 ...

  8. 如何在云端部署SAP HANA实战, Azure 上的 SAP HANA(大型实例)概述和体系结构

    什么是 Azure 上的 SAP HANA(大型实例)? Azure 上的 SAP HANA(大型实例)是一种针对 Azure 的独特解决方案. 除了提供 Azure 虚拟机以用于部署和运行 SAP ...

  9. Java工程师学习指南 初级篇

    Java工程师学习指南 初级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我之前写的文章都 ...

随机推荐

  1. JAVA_OPTS

    JAVA_OPTS ,顾名思义,是用来设置JVM相关运行参数的变量. JVM:JAVA_OPTS="-server -Xms2048m -Xmx2048m -Xss512k" -s ...

  2. 京东MySQL监控之Zabbix优化、自动化

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangwei007.blog.51cto.com/68019/1833332 随 ...

  3. C中的数组与指针问题

    反复在数组名与指针上犯错误,特记录下. ,,,,}; int *p, *q; p = (); q = (); *(p+1)?   *(q-1) ? 答案是 3, 5.这里主要涉及的问题就是指针参与运算 ...

  4. 学习OpenStack之 (0):基础知识

    vi 方向键出现字母问题解决方法 执行命令 sudo apt-get remove vim-common 执行命令 sudo apt-get install vim 鼠标被virtualbox捕获无法 ...

  5. [转]Asp.net MVC使用Filter解除Session, Cookie等依赖

    本文转自:http://www.cnblogs.com/JustRun1983/p/3279139.html 本文,介绍了Filter在MVC请求的生命周期中的作用和角色,以及Filter的一些常用应 ...

  6. [转]forever: 让nodejs应用后台执行

    在LINUX中我们可以使用这种简单的方式让node.js在后台运行: nohup node your_app.js & forever可以让我们做得更好,并且可以跨平台的在windows和Li ...

  7. jquery实现输入框聚焦,键盘上下键选择城市

    在最近有个项目中 需要实现当文本框聚焦的时候,可以键盘上下键选择内容,按enter键的时候,把内容传到输入框中,如图所示: 实现代码如下: /** *输入框聚焦,键盘上下键选择城市 */ ;(func ...

  8. NOIP2004合并果子

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  9. NOIP2000方格取数[DP]

    题目描述 设有N*N的方格图(N<=9),我们将其中的某些方格中填入正整数,而其他的方格中则放 人数字0.如下图所示(见样例): A 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 ...

  10. UIScrollView 滑动复位

    需求 在每次打开界面滑动列表都是复位状态(未滑动). 分析 在制作滑动列表时常常会结合UIPanel和UIScrollView 要让滑动列表回到未滑动时的位置,那么就需要改变Panel的Clippin ...