惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
AI
AI
博客园 - 三生石上(FineUI控件)
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Y
Y Combinator Blog
大猫的无限游戏
大猫的无限游戏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网
NISL@THU
NISL@THU
S
Schneier on Security
T
Threatpost
T
Tenable Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
IT之家
IT之家
宝玉的分享
宝玉的分享
T
Tailwind CSS Blog
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy & Cybersecurity Law Blog
I
Intezer
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
T
Threat Research - Cisco Blogs
SecWiki News
SecWiki News
AWS News Blog
AWS News Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Proofpoint News Feed
V
V2EX
Recorded Future
Recorded Future
Microsoft Security Blog
Microsoft Security Blog
S
Secure Thoughts
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
Apple Machine Learning Research
Apple Machine Learning Research
Project Zero
Project Zero
PCI Perspectives
PCI Perspectives
G
GRAHAM CLULEY
Help Net Security
Help Net Security
Cloudbric
Cloudbric
Recent Announcements
Recent Announcements
V
Visual Studio Blog
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
C
CERT Recently Published Vulnerability Notes
The Cloudflare Blog
Forbes - Security
Forbes - Security
C
Cisco Blogs
O
OpenAI News
www.infosecurity-magazine.com
www.infosecurity-magazine.com

博客园 - 麦舒

网站访问速度的优化 ERP 订单打印的优化 页面 SEO 信息的优化 一个网站首页重构小记 广告播放软件的开发 项目分享九:客户端的异常处理 项目分享八:基于按钮点击事件的弹窗 项目分享七:客户端防止表单重复提交 项目分享六:图片的延迟加载 项目分享五:H5图片压缩与上传 项目分享四:购物车页面的更新 项目分享三:页面之间的传值 项目分享二:APP 小红点中数字的处理 项目分享一:在项目中使用 IScroll 所碰到的那些坑 微信开发——通过授权获取用户的基本信息 千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布 实现虽易,写好不易——小玩意也能体现编码功力,微信消息处理框架发布 代码重构之 —— 一堆if、esle 逻辑的处理 ALinq Dynamic 使用指南——代码的获取与编译
ALinq Dynamic 使用指南——慨述(上)
麦舒 · 2014-05-15 · via 博客园 - 麦舒

2014-05-15 17:06  麦舒  阅读(957)  评论()    收藏  举报

一.使用

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