zoukankan      html  css  js  c++  java
  • 一起学习MVC(4)entity SQL语句

    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();
                }
  • 相关阅读:
    windows无法完成格式化
    javascript数组添加元素的三种方式
    sql server将字符串类型转换为数值类型
    javascript将字符串转化成json对象的3种方法
    bootstrap table刷新表格记录
    html元素的title属性值换行
    webstorm快捷键失效问题
    设计模式之原型,学习笔记
    设计模式之封装,学习笔记
    初了解JS设计模式,学习笔记
  • 原文地址:https://www.cnblogs.com/sobaby/p/1378859.html
Copyright © 2011-2022 走看看