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

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
CXSECURITY Database RSS Feed - CXSecurity.com
D
Docker
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
Last Week in AI
Last Week in AI
Hugging Face - Blog
Hugging Face - Blog
博客园 - 三生石上(FineUI控件)
宝玉的分享
宝玉的分享
美团技术团队
爱范儿
爱范儿
V
V2EX
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
博客园 - 司徒正美
博客园 - 叶小钗
S
SegmentFault 最新的问题
量子位
S
Secure Thoughts
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
O
OpenAI News
L
LINUX DO - 最新话题
罗磊的独立博客
SecWiki News
SecWiki News
雷峰网
雷峰网
Recent Announcements
Recent Announcements
V2EX - 技术
V2EX - 技术
T
Tailwind CSS Blog
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
云风的 BLOG
云风的 BLOG
Schneier on Security
Schneier on Security
T
The Blog of Author Tim Ferriss
IT之家
IT之家
博客园 - 聂微东
腾讯CDC
N
News | PayPal Newsroom
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
Hacker News: Ask HN
Hacker News: Ask HN
aimingoo的专栏
aimingoo的专栏
Webroot Blog
Webroot Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
K
Kaspersky official blog

博客园 - sobaby

Sql Server的两个小技巧 用vue.js重构订单计算页面 用vue.js实现购物车功能 一步步实现自己的ORM(五) 一步步实现自己的ORM(四) 将Object转换成Dictionary方法 一步步实现自己的ORM(三) 一步步实现自己的ORM(二) 一步步实现自己的ORM(一) 修复Windows XP服务扩展视图显示空白 ASP.NET MVC :MVC页面验证与授权 一起学习MVC(3)-搭建项目 一起学习MVC(2)-数据库设计 一起学习MVC(1)-搭建开发环境 什么是工作流 学习WWF中 关于回调函数 ASP.net:水晶报表的5种表格设计模式 ASP.NET 安全认证(一):如何运用 Form 表单认证
一起学习MVC(4)-entity SQL语句
sobaby · 2009-01-20 · via 博客园 - sobaby

Entity SQL 是类似于 SQL 的、与存储无关的语言。Entity SQL 旨在基于 实体数据模型 (EDM) 查询和处理对象的多功能对象图形。下面我们和SQL语句对比着来学习。ESQL语句是不区分大小写的。

它支持以下功能 (摘在网上)

  支持与不支持的查询:

  from子句

  in和exists

  union, intersect, except来表示并交差集

  join表达式

  支持p.Address.City 这种级联查询

  不支持*操作

  group by时也要select k from T as t group by (t.x + t.y) as k这种方式

 首先从select开始:

   我们常见的SQL语句是:Select * from members

                    对应的ESQL语句就是:Select value m from members as m

                    这里的value是必须的 上面的语句也可以这么写:select value members  from members

如果选择某一字段呢?select userid from members 

               对应的ESQL语句就是:select value m.userid from members as m; 

如果要选择一个以上的字段就和上面的不一样,ESQL语句里必须要使用row函数,TSQL:select userid from members 

               对应的ESQL语句就是:select value row(m.userid,m.username) from members as m;  

我们再看下面带where语句的标准SQL:select * from members where userid=1

                    对应的ESQL语句就是:select value m from members as m where m.userid=1

                    看到了区别了吧。

那我们下面再写一个带top的SQL语句:select top 10 * from members where userid>0

                    对应的ESQL语句就是:select value top(10) m from members as m where m.userid>0 

下面继续写一个ORDER BY 的语句:select * from members order by userid desc

                    对应的ESQL语句就是:SELECT value m from members as m order by m.userid desc

如果有多个条件呢?select * from members order by userid desc,username desc

                    对应的ESQL语句就是:select value m from members as m order by m.userid desc,m.username desc

是不是觉得很EZ??

下面再将一个分页的,分页规则按照USERID降序分页,每页10条。

          在MYSQL里面如果要分页的话就可以用下面的SQL

               select * from members order by userid desc limit,10,10

               其中第一个参数就是从开始的行号,第二个参数是要获取的最多的记录数

          如果我们要在SQLSERVER里面的话就要这么写了

   select top 10 * from members where userid<(select min(userid) from (select top 10 userid from members order by userid desc) as u) order by userid desc

  呵呵,是不是太复杂了??如果我们要在ESQL里面分页怎么办??这时可以使用两个函数skip 和 limit,看一下下面的写法:

select value m from members as m order by m.userid desc skip(10) limit(10)

这里的skip和limit不能脱离order by 子句,skip的意思是说跳过多少行,limit的意思就是选中行的数目,两个函数也可以单独使用,比如

select value m from members as m order by m.userid desc skip(10) 跳过前10行,返回从第11行(包含第11行)以后的所有记录

select value from members as m order by m.userid desc limit(10) 显示前10行记录和TOP的作用是一样的。

需要注意的一点就是:skip和top如果同时使用的话,该查询表达式无效,必须重写查询表达式,使用limit函数

接下来我们一起学习group by  IN EXISTS语句,还是老思路对比着TSQL来学ESQL     。

  首先学习group by我们来看一下TSQL:select count(*) from orders group by userid

                    对应的ESQL语句:select value count(k) from Orders as t group by t.userid as k 

                  当然我们也可以使用其他聚合函数max,min,sum,avg,我这里就不一一演示了

                     group by 后面的字段不用别名可以不?答案是可以的            

再看下面的TSQL语句:select count(*),userid from orders group by userid

                    对应的ESQL语句:select value row(count(k),k) from orders as t group by t.userid as k

说了这些多,怎么执行ESQL语句呢?

            b2cDBEntities db = new b2cDBEntities();
            
string sql = "select value m from members as m";
            var query 
= db.CreateQuery<Members>(sql);foreach (var k in query)
            {
                Console.WriteLine(k.UserID);
            }

当然也可以象执行ADO.NET对象一样执行

string ConnectionString = "metadata=res://*/StoreModel.csdl|res://*/StoreModel.ssdl|res://*/StoreModel.msl;provider=System.Data.SqlClient;provider connection string=';Data Source=.;Initial Catalog=b2cDB;Integrated Security=True;MultipleActiveResultSets=True';";
            
using (EntityConnection conn = new EntityConnection(ConnectionString))
            {
                conn.Open();
                EntityCommand cmd 
= conn.CreateCommand();
                
string sql = "select VALUE m from b2cDBEntities.members as m";
                cmd.CommandText 
= sql;
                EntityDataReader dr 
= cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                
while (dr.Read())
                {
                    Console.WriteLine(dr[
"UserID"]);
                }
                dr.Close();
            }