zoukankan      html  css  js  c++  java
  • ADO.NET Entity Framework(5)esql

     

    目录

    1    esql的查询结果集 ObjectQuery    1

    1.1    ObjectQuery<实体>    1

    1.2    ObjectQuery<DbDataRecord>    1

    1.3    ObjectQuery<简单类型>    1

    2    esql的使用    2

    2.1    it关键字    2

    2.2    value 关键字    2

    2.3    查询参数的使用    3

    2.4    中文字段    3

    3    得到esql与sql字串    3

    3.1    CommandText属性    4

    3.2    ToTraceString方法    4

    4    ObjectQuery的Linq方法    4

    4.1    Where    4

    4.2    OrderBy    4

    4.3    Select    4

    4.4    SelectValue(projection)    4

    4.5    Top(count)    5

    4.6    Skip(keys,count)    5

    4.7    分页 Skip Top    5

    4.8    GroupBy(keys,projection)    6

    4.9    Include(path)    6

    5    esql注释,成员访问,分行    6

    6    esql运算符    7

    6.1    算术运算符    7

    6.2    比效运算符    7

    6.3    逻辑运算符    7

    6.4    区间    7

    6.5    集合运算    8

    7    esql函数    10

    7.1    统计类    10

    7.1.1    联合使用    11

    7.1.2    与group by一起使用    11

    7.2    数学类    11

    7.3    日期    11

    7.4    字符    12

    8    esql语句    12

    8.1    查询语句    12

    8.2    CASE语句    14

    9    esql 类型    14

    9.1    简单类型    14

    9.2    REF    16

    9.3    ROW    16

    9.4    集合    16

    9.5    Object 返回对像    17

    9.6    CAST 类型转换    17

    9.7    OFTYPE    18

    9.8    TREAT    18

    9.9    IS 类型判断    19

    10    esql Namespace    19

    10.1    使用SqlServer函数    19

    10.2    使用NET的数据类型    20

    11    esql关系,导航    20

    11.1    KEY    20

     

     

     

     

     

     

    比起 LINQ to SQL,EF 除了提供 LINQ 查询方式, 还提供了 Entity SQL language

    ESQL 类似 Hibernate 的 HSQL,ESQL 与SQL 语言的语法相似,以字符串的方式执行

    esql的查询结果集 ObjectQuery

    ObjectQuery<实体>

    myContext context = new myContext();

     

    string esql = "SELECT VALUE DBItemList FROM myContext.DBItemList";

     

    // ObjectQuery<DBItemList> query = new ObjectQuery<DBItemList>(esql, context);

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine(r.NameID);

    }

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM myContext.DBItemList as it";

     

    // ObjectQuery<DBItemList> query = new ObjectQuery<DBItemList>(esql, context);

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine(r.NameID);

    }

     

    ObjectQuery<DbDataRecord>

    myContext context = new myContext();

     

    string esql = "SELECT it.NameID FROM myContext.DBItemList as it";

     

    //ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(esql, context);

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine(r["NameID"].ToString());

    }

     

    ObjectQuery<简单类型>

    myContext context = new myContext();

     

    string esql = "SELECT value count(it.NameID) FROM myContext.DBItemList as it";

     

    // ObjectQuery<int> query = new ObjectQuery<int>(esql, context);

     

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

    myContext context = new myContext();

     

    string esql = "SELECT value it.NameID FROM myContext.DBItemList as it";

     

    // ObjectQuery<int> query = new ObjectQuery<int>(esql, context);

     

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

    foreach (string n in query)

    {

    Console.WriteLine(n);

    }

     

    esql的使用

    可以在

    • ObjectQuery的Linq方法,
    • 构造ObjectQuery,
    • context.CreateQuery返方法,

    中使用esql,并得到返回的榄查询结果ObjectQuery

    it关键字

    [it] 出现在 ESQL 中, 由 ObjectQuery<T>.Name 属性设定,用于标示源查询对象(ObjectQuery)的名称,

    类似于 "SELECT * FROM Tab as it WHERE it.ItemValue =14" 。

    可以将这个默认值 "it" 改成其他字符串。

     

    myContext context = new myContext();

    context.DBItemList.Name = "wxd";

     

    ObjectQuery<DBItemList> list = context.DBItemList.Where("wxd.ItemValue=5");

    myContext context = new myContext();

     

    var sql = "SELECT VALUE DBItemList FROM myContext.DBItemList";

    var query = new ObjectQuery<DBItemList>(sql, context);

    query.Name = "wxd";

     

    ObjectQuery<DBItemList> list = query.Where("wxd.ItemValue=@v", new ObjectParameter("v", 5));

     

    value 关键字

    value 后只能返回一个成员

    myContext context = new myContext();

    string esql = "SELECT value AVG(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    3

    */

    string esql = "select value it.ItemID from myContext.DBItemList as it";

     

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

     

    foreach (string r in query)

    {

    Console.WriteLine(r);

    }

    myContext context = new myContext();

     

    string esql = "select value row( it.ItemValue ,it.NameID,'wxd' as wxwinter) from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1},{2}", r["ItemValue"], r["NameID"], r["wxwinter"]);

    }

     

     

    查询参数的使用

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM myContext.DBItemList as it where it.ItemValue=@v1 or it.NameID=@v2";

     

    ObjectParameter v1 = new ObjectParameter("v1", 3);

    ObjectParameter v2 = new ObjectParameter("v2", "n01");

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql,v1,v2);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}",r.NameID,r.ItemValue);

    }

     

    中文字段

    使用[]将字段括起来

    myContext context = new myContext();

     

    ObjectQuery<typeTest> query = context.typeTest.Where("it.值 ==22.22");

    System.Console.WriteLine(query.CommandText);

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}", r.a, r.b, r.c, r.d, r.e, r.值);

    }

     

    myContext context = new myContext();

     

    ObjectQuery<typeTest> query = context.typeTest.Where("it.[值] ==22.22");

    System.Console.WriteLine(query.CommandText);

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}", r.a, r.b, r.c, r.d, r.e, r.值);

    }

     

    得到esql与sql字串

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM myContext.DBItemList as it";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    Console.WriteLine(query.CommandText);

     

    Console.WriteLine(query.ToTraceString())

    SELECT VALUE it FROM myContext.DBItemList as it

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [Extent1]

     

    CommandText属性

    得到esql字串

    ToTraceString方法

    得到sql字串

     

     

    ObjectQuery的Linq方法

     

    Where

    用字符串为条件进行查询

    ObjectQuery<T> Where(string predicate, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<DBItemList> list = context.DBItemList.Where("(it.ItemValue=5 or it .ItemValue=5) and it.NameID='n01'");

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [Extent1]

    WHERE (([Extent1].[ItemValue] = 5) OR ([Extent1].[ItemValue] = 5)) AND ([Extent1].[NameID] = 'n01')

     

    OrderBy

    排序

    ObjectQuery<T> OrderBy(string keys, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<DBItemList> query = context.DBItemList.OrderBy("it.ItemValue,it.ItemID desc");

    foreach (var r in query)

    {

    Console.WriteLine("{0},{1},{2},{3}", r.AutoId, r.ItemID, r.NameID, r.ItemValue);

    }

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [Extent1]

    ORDER BY [Extent1].[ItemValue] ASC, [Extent1].[ItemID] DESC

     

    Select

    射影

    ObjectQuery<DbDataRecord> Select(string projection, params ObjectParameter[] parameters);

    myContext context = new myContext();

     

    ObjectQuery<DbDataRecord> list = context.DBItemList.Select(" it.ItemValue as a,it.NameID ");

    SELECT

    1 AS [C1],

    [Extent1].[ItemValue] AS [ItemValue],

    [Extent1].[NameID] AS [NameID]

    FROM [dbo].[DBItemList] AS [Extent1]

     

    SelectValue(projection)

    返回只有一组字段的数组

    ObjectQuery<TResultType> SelectValue<TResultType>(string projection, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<int> query = context.DBItemList.SelectValue<int>("it.ItemValue + it.AutoID");

    foreach (var r in query)

    {

    Console.WriteLine(r);

    }

    SELECT

    [Extent1].[ItemValue] + [Extent1].[AutoId] AS [C1]

    FROM [dbo].[DBItemList] AS [Extent1]

     

    Top(count)

    集合的前n个元素

    count : n个元素

    ObjectQuery<T> Top(string count, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<DBItemList> query = context.DBItemList.Top("3"); ;

    foreach (var r in query)

    {

    Console.WriteLine("{0},{1},{2},{3}", r.AutoId, r.ItemID, r.NameID, r.ItemValue);

     

    }

    SELECT TOP (3)

    [c].[AutoId] AS [AutoId],

    [c].[NameID] AS [NameID],

    [c].[ItemID] AS [ItemID],

    [c].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [c]

     

    Skip(keys,count)

    跳过集合的前n个元素,

    keys : 用于排序的字段

    count : 要跳过的记录个数

    ObjectQuery<T> Skip(string keys, string count, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<DBItemList> query = context.DBItemList.Skip("it.ItemValue", "5");

    foreach (var r in query)

    {

    Console.WriteLine("{0},{1},{2},{3}", r.AutoId, r.ItemID, r.NameID, r.ItemValue);

     

    }

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM ( SELECT [Extent1].[AutoId] AS [AutoId], [Extent1].[NameID] AS [NameID], [Extent1].[ItemID] AS [ItemID], [Extent1].[ItemValue] AS [ItemValue], row_number() OVER (ORDER BY [Extent1].[ItemValue] ASC) AS [row_number]

        FROM [dbo].[DBItemList] AS [Extent1]

    ) AS [Extent1]

    WHERE [Extent1].[row_number] > 5

    ORDER BY [Extent1].[ItemValue] ASC

     

    分页 Skip Top

    SkipTop一起使用

    myContext context = new myContext();

    ObjectQuery<DBItemList> query = context.DBItemList.Skip("it.ItemValue", "5").Top("3"); ;

    foreach (var r in query)

    {

    Console.WriteLine("{0},{1},{2},{3}", r.AutoId, r.ItemID, r.NameID, r.ItemValue);

     

    }

    SELECT TOP (3)

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM ( SELECT [Extent1].[AutoId] AS [AutoId], [Extent1].[NameID] AS [NameID], [Extent1].[ItemID] AS [ItemID], [Extent1].[ItemValue] AS [ItemValue], row_number() OVER (ORDER BY [Extent1].[ItemValue] ASC) AS [row_number]

        FROM [dbo].[DBItemList] AS [Extent1]

    ) AS [Extent1]

    WHERE [Extent1].[row_number] > 5

    ORDER BY [Extent1].[ItemValue] ASC

     

    GroupBy(keys,projection)

    分组

    keys: GROUP BY的字段

    projection : Select 的内容

    ObjectQuery<DbDataRecord> GroupBy(string keys, string projection, params ObjectParameter[] parameters);

    myContext context = new myContext();

    ObjectQuery<DbDataRecord> query = context.DBItemList.GroupBy("it.ItemID", "it.ItemID,Sum(it.ItemValue) as ValueSum");

    foreach (var r in query)

    {

    Console.WriteLine("{0},{1}", r["ItemID"], r["ValueSum"]);

    }

    /*

    a,23

    b,8

    c,23

    */

    SELECT

    1 AS [C1],

    [GroupBy1].[K1] AS [ItemID],

    [GroupBy1].[A1] AS [C2]

    FROM ( SELECT

        [Extent1].[ItemID] AS [K1],

        SUM([Extent1].[ItemValue]) AS [A1]

        FROM [dbo].[DBItemList] AS [Extent1]

        GROUP BY [Extent1].[ItemID]

    ) AS [GroupBy1]

    SELECT it.ItemID,Sum(it.ItemValue) as ValueSum

    FROM ( [DBItemList] ) AS it

    GROUP BY it.ItemID

     

     

    Include(path)

    加载关联数据,参数为实体的[导航属性]的字串,调用Include("导航属性")后,关联数据会加载,这样就不用在[实体.导航属性]上调用Load()方法

    ObjectQuery<T> Include(string path);

    myContext context = new myContext();

     

    var r = context.DBItem.Include("DBItemList");

    foreach (var dbitem in r)

    {

    foreach (var dbitemlist in dbitem.DBItemList)

    {

    Console.WriteLine("{0},{1}", dbitemlist.NameID, dbitemlist.ItemValue);

    }

    }

    效果与下例相同

    myContext context = new myContext();

     

    var r = context.DBItem;

    foreach (var dbitem in r)

    {

    dbitem.DBItemList.Load();

    foreach (var dbitemlist in dbitem.DBItemList)

    {

    Console.WriteLine("{0},{1}", dbitemlist.NameID, dbitemlist.ItemValue);

    }

    }

     

    esql注释,成员访问,分行

    注释

    --

    成员访问

    .

    分行

    ;

     

    esql运算符

    算术运算符

    +

    -

    *

    /

    %

    -

     

    比效运算符

    等于

    =

    大于

    >

    大于等于

    >=

    空判断

    IS NOT NULL

    IS NULL

    小于

    <

    小天等于

    <=

    不等于

    !=

    <>

    字符比效

    LIKE ''

    NOT LIKE ''

    % :

    _ :

    [ ] :

    [^] :

     

    逻辑运算符

    AND

    &&

    NOT

    !

    OR

    ||

     

     

    区间

    BETWEEN

    之间

    BETWEEN n AND m

    NOT BETWEEN n AND m

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM [DBItemList] AS it WHERE it.ItemValue BETWEEN 2 and 4";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    myContext context = new myContext();

     

    ObjectQuery<DBItemList> query = context.DBItemList.Where(" it.ItemValue not BETWEEN 2 and 4");

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    IN

    在集合中

    IN {v,v}

    NOT IN{v,v}

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM [DBItemList] AS it WHERE it.ItemValue IN {1,2,3}";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    myContext context = new myContext();

     

    ObjectQuery<DBItemList> query = context.DBItemList.Where("it.ItemValue not IN {1,2,3}");

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    EXISTS

    存在

    EXISTS(select from)

    NOT EXISTS(select from)

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM [DBItemList] AS it WHERE exists(Select VALUE it2 From DBItem as it2 Where it2.ItemID=it.ItemID )";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    myContext context = new myContext();

     

    ObjectQuery<DBItemList> query = context.DBItemList.Where("exists(Select VALUE it2 From DBItem as it2 Where it2.ItemID=it.ItemID )");

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    分页

    SELECT VALUE it FROM ( [DBItemList] ) AS it

    ORDER BY it.ItemValue

    SKIP 5

    LIMIT 3

    集合运算

    Union

    (合集)

    连接不同集合

    UNION --自动过滤相同项

    UNION ALL --两个集合的相同项都会返回

    myContext context = new myContext();

     

    string esql = "(select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'a' ) UNION (select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'b' )";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    EXCEPT

    (左并集)

    从集合中删除其与另一个集合中相同的项

    myContext context = new myContext();

     

    string esql = "(select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'a' ) EXCEPT (select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'b' )";

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    INTERSECT

    (交集)

    获取不同集合的相同项

    myContext context = new myContext();

     

    string esql = "(select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'a' ) INTERSECT (select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID == 'b' )";

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    ANYELEMENT

    集合中的第一个

    myContext context = new myContext();

     

    string esql = "ANYELEMENT(select value it from myContext.DBItemList as it where it.ItemID == 'a') ";

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    //如果集合中有两个以上,只返回第一个到集合中

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    SELECT

    [Element1].[AutoId] AS [AutoId],

    [Element1].[NameID] AS [NameID],

    [Element1].[ItemID] AS [ItemID],

    [Element1].[ItemValue] AS [ItemValue]

    FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]

    LEFT OUTER JOIN (SELECT TOP (1)

        [Extent1].[AutoId] AS [AutoId],

        [Extent1].[NameID] AS [NameID],

        [Extent1].[ItemID] AS [ItemID],

        [Extent1].[ItemValue] AS [ItemValue]

        FROM [dbo].[DBItemList] AS [Extent1]

        WHERE [Extent1].[ItemID] = 'a' ) AS [Element1] ON 1 = 1

    OVERLAPS

    两个集合是否有相交部份

    myContext context = new myContext();

     

    string esql = "(select value it from myContext.DBItemList as it where it.ItemID == 'c' || it.ItemID=='b' ) OVERLAPS (select value it from myContext.DBItemList as it where it.ItemID == 'a' || it.ItemID=='b')";

    ObjectQuery<bool> query = context.CreateQuery<bool>(esql);

     

    foreach (bool r in query)

    {

    Console.WriteLine(r);

    }

    //print: True

    SELECT

    CASE WHEN ( EXISTS (SELECT

        cast(1 as bit) AS [C1]

        FROM (SELECT

            [Extent1].[AutoId] AS [AutoId],

            [Extent1].[NameID] AS [NameID],

            [Extent1].[ItemID] AS [ItemID],

            [Extent1].[ItemValue] AS [ItemValue]

            FROM [dbo].[DBItemList] AS [Extent1]

            WHERE ([Extent1].[ItemID] = 'c') OR ([Extent1].[ItemID] = 'b')

        INTERSECT

            SELECT

            [Extent2].[AutoId] AS [AutoId],

            [Extent2].[NameID] AS [NameID],

            [Extent2].[ItemID] AS [ItemID],

            [Extent2].[ItemValue] AS [ItemValue]

            FROM [dbo].[DBItemList] AS [Extent2]

            WHERE ([Extent2].[ItemID] = 'a') OR ([Extent2].[ItemID] = 'b')) AS [Intersect1]

    )) THEN cast(1 as bit) WHEN ( NOT EXISTS (SELECT

        cast(1 as bit) AS [C1]

        FROM (SELECT

            [Extent3].[AutoId] AS [AutoId],

            [Extent3].[NameID] AS [NameID],

            [Extent3].[ItemID] AS [ItemID],

            [Extent3].[ItemValue] AS [ItemValue]

            FROM [dbo].[DBItemList] AS [Extent3]

            WHERE ([Extent3].[ItemID] = 'c') OR ([Extent3].[ItemID] = 'b')

        INTERSECT

            SELECT

            [Extent4].[AutoId] AS [AutoId],

            [Extent4].[NameID] AS [NameID],

            [Extent4].[ItemID] AS [ItemID],

            [Extent4].[ItemValue] AS [ItemValue]

            FROM [dbo].[DBItemList] AS [Extent4]

            WHERE ([Extent4].[ItemID] = 'a') OR ([Extent4].[ItemID] = 'b')) AS [Intersect2]

    )) THEN cast(0 as bit) END AS [C1]

    FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]

    Set

    去掉重复项

    myContext context = new myContext();

     

    string esql = "set(select value it.ItemID from myContext.DBItemList as it)";

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

     

    foreach (string r in query)

    {

    Console.WriteLine(r);

    }

    //去掉了重复项

    SELECT

    [Distinct1].[ItemID] AS [ItemID]

    FROM ( SELECT DISTINCT

        [Extent1].[ItemID] AS [ItemID]

        FROM [dbo].[DBItemList] AS [Extent1]

    ) AS [Distinct1]

     

     

     

    esql函数

    统计类

    Avg

    平均值

    myContext context = new myContext();

    string esql = "SELECT value AVG(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    3

    */

    BigCount

    个数(long)

    myContext context = new myContext();

    string esql = "SELECT value BigCount(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<long> query = context.CreateQuery<long>(esql);

    foreach (long n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    15

    */

    Count

    个数(int)

    myContext context = new myContext();

    string esql = "SELECT value Count(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    15

    */

    Max

    最大值

    myContext context = new myContext();

    string esql = "SELECT value Max(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    6

    */

    Min

    最小值

    myContext context = new myContext();

    string esql = "SELECT value Min(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    1

    */

    Sum

    合计

    myContext context = new myContext();

    string esql = "SELECT value Sum(it.ItemValue) FROM myContext.DBItemList as it";

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

    foreach (int n in query)

    {

    Console.WriteLine(n);

    }

     

    /* print:

    54

    */

     

    联合使用

    myContext context = new myContext();

    string esql = "SELECT Max(it.ItemValue) as Max , Min(it.ItemValue) as Min FROM myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("Max:{0},Min:{1}", r["Max"], r["Min"]);

    }

     

    /* print:

    Max:6,Min:1

    */

     

    与group by一起使用

    myContext context = new myContext();

    string esql = "SELECT ID as ItemID , Max(it.ItemValue) as Max , Min(it.ItemValue) as Min FROM myContext.DBItemList as it group by it.ItemID as ID";

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("ItemID:{0}, Max:{1},Min:{2}", r["ItemID"], r["Max"], r["Min"]);

    }

     

    /* print:

    ItemID:a, Max:6,Min:2

    ItemID:b, Max:5,Min:1

    ItemID:c, Max:6,Min:2

    */

     

    数学类

    Abs

    绝对值

    Abs(-2)

    Round

    随机数

    Round(748.58)

     

    日期

    CurrentDateTime()

     

    CurrentDateTimeOffset()

     

    CurrentUtcDateTime()

     

    Day( expression )

    Day(cast('03/12/1998' as DateTime)) --返回:12

    GetTotalOffsetMinutes

    --返回:

    SQL Server 2008 only

    Hour ( expression )

    Hour(cast('22:35:5' as DateTime)) --返回:22

    Minute( expression )

    Minute(cast('22:35:5' as DateTime)) --返回:35

    Month (expression)

    Month(cast('03/12/1998' as DateTime)) --返回:3

    Second( expression )

    Second(cast('22:35:5' as DateTime)) --返回:5

    Year( expression )

    Year(cast('03/12/1998' as DateTime)) --返回:1998

     

     

    字符

    Concat ( string1, string2)

    字符串连接

    Concat('abc', 'xyz') --返回:abcxyz

    IndexOf( string1, string2)

    字符串位置查找

    IndexOf('xyz', 'abcxyz') --返回:4

    Length ( string )

    字符串长度

    Legth('abcxyz') --返回:6

    Reverse ( string )

    字符串反转

    Reverse('abcd') --返回:dcba

    ToLower( string )

    大写转小写

    ToLower('ABC') --返回:abc

    ToUpper( string )

    小写转大写

    ToUpper('abc') --返回:ABC

    Trim( string )

    去两端空格

    Trim(' abc ') --返回:abc

    LTrim( string )

    去左端空格

    LTrim(' abc') --返回:abc

    RTrim( string )

    去右端空格

     

    Left ( string, length)

    左端截取

    Left('abcxyz', 3) --返回:abc

    Right ( string, length)

    右端截取

    Right('abcxyz', 3) --返回:xyz

    Substring ( string, start, length)

    两端截取

    Substring('abcxyz', 4, 3) --返回:xyz

     

     

    esql语句

    查询语句

    SELECT

    myContext context = new myContext();

     

    string esql = "SELECT it.ItemValue as a,it.NameID FROM [DBItemList] AS it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1}", r["a"], r["NameID"]);

    }

    SELECT

    1 AS [C1],

    [Extent1].[ItemValue] AS [ItemValue],

    [Extent1].[NameID] AS [NameID]

    FROM [dbo].[DBItemList] AS [Extent1]

    WHERE

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM [DBItemList] AS it WHERE (it.ItemValue=5 or it .ItemValue=5) and it.NameID='n01' ";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [Extent1]

    WHERE (([Extent1].[ItemValue] = 5) OR ([Extent1].[ItemValue] = 5)) AND ([Extent1].[NameID] = 'n01')

    GROUP BY

    myContext context = new myContext();

     

    string esql = "SELECT it.ItemID,Sum(it.ItemValue) as ValueSum FROM [DBItemList] AS it GROUP BY it.ItemID ";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1}", r["ItemID"], r["ValueSum"]);

    }

    SELECT

    1 AS [C1],

    [GroupBy1].[K1] AS [ItemID],

    [GroupBy1].[A1] AS [C2]

    FROM ( SELECT

        [Extent1].[ItemID] AS [K1],

        SUM([Extent1].[ItemValue]) AS [A1]

        FROM [dbo].[DBItemList] AS [Extent1]

        GROUP BY [Extent1].[ItemID]

    ) AS [GroupBy1]

    ORDER BY

    myContext context = new myContext();

     

    string esql = "SELECT VALUE it FROM [DBItemList] AS it ORDER BY it.ItemValue,it.ItemID desc ";

     

    ObjectQuery<DBItemList> query = context.CreateQuery<DBItemList>(esql);

     

    foreach (DBItemList r in query)

    {

    Console.WriteLine("{0},{1}", r.ItemID, r.ItemValue);

    }

    SELECT

    [Extent1].[AutoId] AS [AutoId],

    [Extent1].[NameID] AS [NameID],

    [Extent1].[ItemID] AS [ItemID],

    [Extent1].[ItemValue] AS [ItemValue]

    FROM [dbo].[DBItemList] AS [Extent1]

    ORDER BY [Extent1].[ItemValue] ASC, [Extent1].[ItemID] DESC

    HAVING

    myContext context = new myContext();

     

    string esql = "SELECT it.ItemID,Count(it.ItemValue) as ValueSum FROM DBItemList AS it GROUP BY it.ItemID HAVING SUM(it.ItemValue) > 5";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1}", r["ItemID"], r["ValueSum"]);

    }

    SELECT

    1 AS [C1],

    [GroupBy1].[K1] AS [ItemID],

    [GroupBy1].[A2] AS [C2]

    FROM ( SELECT

        [Extent1].[ItemID] AS [K1],

        SUM([Extent1].[ItemValue]) AS [A1],

        COUNT([Extent1].[ItemValue]) AS [A2]

        FROM [dbo].[DBItemList] AS [Extent1]

        GROUP BY [Extent1].[ItemID]

    ) AS [GroupBy1]

    WHERE [GroupBy1].[A1] > 5

    JOIN

    Cross Joins

    Inner Joins

    Left Outer Joins

    Right Outer Joins

    Full Outer Joins

     

    CASE语句

    CASE WHEN THEN ELSE END

    myContext context = new myContext();

     

    string esql = "select it.ItemID, it.ItemValue ,(Case when it.ItemValue =1 then '差' when it.ItemValue between 2 and 4 then '好' else '其他' end) as ItemValueRemarks from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1},{2}", r["ItemID"], r["ItemValue"], r["ItemValueRemarks"]);

    }

    /*

    c,4,好

    c,5,其他

    c,2,好

    c,3,好

    b,5,其他

    c,6,其他

    b,2,好

    b,1,差

    c,3,好

    a,4,好

    a,5,其他

    a,2,好

    a,3,好

    a,6,其他

    a,3,好

    */

     

     

     

     

    esql 类型

    简单类型

    Null

    is Null

    is not Null

    myContext context = new myContext();

     

    ObjectQuery<typeTest> query = context.typeTest.Where("it.b is not Null");

     

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    Boolean

    True,False

    myContext context = new myContext();

     

    ObjectQuery<typeTest> query = context.typeTest.Where("it.e==True");

     

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    Integer

    Float,Double

    Decimal

    123

    123.456

    23.34

    myContext context = new myContext();

     

    ObjectQuery<typeTest> query = context.typeTest.Where("it.c==123");

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    String

    "abcd"

    N"U字符"

    'abcd'

    myContext context = new myContext();

     

    // ObjectQuery<typeTest> query = context.typeTest.Where("it.b==N'冬冬'");

    ObjectQuery<typeTest> query = context.typeTest.Where("it.b==\"冬冬\" ");

    // ObjectQuery<typeTest> query = context.typeTest.Where("it.b=='冬冬'");

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    DateTime

    DATETIME'2007-11-11 22:22'

    DATETIME'2007-11-11 01:01:00.0000000'

    myContext context = new myContext();

     

    // ObjectQuery<typeTest> query = context.typeTest.Where("it.d==DATETIME'1977-11-11 00:00:00.000'");

    ObjectQuery<typeTest> query = context.typeTest.Where("it.d==cast('1977-11-11' as System.DateTime)");

     

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    Time

    TIME'22:11'

    TIME'01:02:03.1234567'

     

    DateTimeOffset

    DATETIMEOFFSET'2007-11-11 22:11 +02:00'

    DATETIMEOFFSET'2007-11-11 01:01:00.0000000 -02:00'

     

    Binary

    Binary'00ffaabb'

    X'ABCabc'

    BINARY '0f0f0f0F0F0F0F0F0F0F'

    X'' –

     

    Guid

    Guid'0321AF86-0AA5-4a86-A086-1D789FA54AA3'

    GUID '0321AF86-0AA5-4a86-A086-1D789FA54AA3'

    myContext context = new myContext();

    ObjectQuery<typeTest> query = context.typeTest.Where("it.a==Guid'0321af86-0aa5-4a86-a086-1d789fa54aa3'");

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

    REF

     

    myContext context = new myContext();

    //string esql = "SELECT it.ItemID FROM DBItem as it";

    string esql = "SELECT REF(it).ItemID FROM DBItem as it";

    ObjectQuery<DbDataRecord> v = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in v)

    {

    Console.WriteLine("{0}", r[0]);

    }

     

    ROW

    myContext context = new myContext();

     

    string esql = "select value row( it.ItemValue ,it.NameID,'wxd' as wxwinter) from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1},{2}", r["ItemValue"], r["NameID"], r["wxwinter"]);

    }

    myContext context = new myContext();

     

    string esql = "select row( it.ItemValue ,it.NameID) as wxd ,it.ItemID from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    DbDataRecord v = r["wxd"] as DbDataRecord;

    Console.WriteLine("{0},{1},{2}", r["ItemID"],v["ItemValue"],v["NameID"]);

    }

    集合

    MULTISET(1,2,3,4)

    {1,2,3,4}

    SELECT VALUE it FROM [DBItemList] AS it WHERE it.ItemValue IN {1,2,3}

     

    myContext context = new myContext();

     

    string esql = "{1,2,3} ";

     

    ObjectQuery<int> query = context.CreateQuery<int>(esql);

     

    foreach (int r in query)

    {

    System.Console.WriteLine(r);

    }

    SELECT

    [UnionAll2].[C1] AS [C1]

    FROM (SELECT

        [UnionAll1].[C1] AS [C1]

        FROM (SELECT

            1 AS [C1]

            FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]

        UNION ALL

            SELECT

            2 AS [C1]

            FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable2]) AS [UnionAll1]

        UNION ALL

            SELECT

            3 AS [C1]

            FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable3]) AS [UnionAll2]

     

    myContext context = new myContext();

     

    string esql = "{row(1 as a,'wxd' as wxwinter),row(2 as a,'lzm' as wxwinter),row(3 as a,'wxwinter' as wxwinter)} ";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    System.Console.WriteLine("{0},{1}",r["a"],r["wxwinter"]);

    }

    /*

    1,wxd

    2,lzm

    3,wxwinter

    */

    SELECT

    1 AS [C1],

    CASE WHEN ([UnionAll2].[C1] = 0) THEN 1 WHEN ([UnionAll2].[C1] = 1) THEN 2 ELSE 3 END AS [C2],

    CASE WHEN ([UnionAll2].[C1] = 0) THEN 'wxd' WHEN ([UnionAll2].[C1] = 1) THEN 'lzm' ELSE 'wxwinter' END AS [C3]

    FROM (SELECT

        [UnionAll1].[C1] AS [C1]

        FROM (SELECT

            0 AS [C1]

            FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]

        UNION ALL

            SELECT

            1 AS [C1]

            FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable2]) AS [UnionAll1]

    UNION ALL

        SELECT

        2 AS [C1]

        FROM ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable3]) AS [UnionAll2]

     

     

    Object 返回对像

    Select 选出的值可以直接创建为对像后,将对像放入字段中返回

    myContext context = new myContext();

    string esql = "SELECT [WindowsFormsApplication8].[DBItemEx](it.ItemID + 'b') as myObject FROM DBItem as it";

    ObjectQuery<DbDataRecord> v = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in v)

    {

    DBItemEx obj = r["myObject"] as DBItemEx;

     

    Console.WriteLine("{0}", obj.ItemID);

     

    }

     

     

    CAST 类型转换

    myContext context = new myContext();

     

    string esql = "select value CAST(it.ItemValue as System.String) from myContext.DBItemList as it";

     

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

     

    foreach (string r in query)

    {

    Console.WriteLine(r);

    }

    myContext context = new myContext();

     

    string esql = "using System;select value CAST(it.ItemValue as String) from myContext.DBItemList as it";

     

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

     

    foreach (string r in query)

    {

    Console.WriteLine(r);

    }

    CAST( d as Edm.Decimal(16, 2) )

     

     

    OFTYPE

    OFTYPE ( expression, [ONLY] test_type )

    myContext context = new myContext();

    string esql = "OFTYPE(((SELECT VALUE it FROM DBItem as it) ),[WindowsFormsApplication8].[DBItemEx])";

    ObjectQuery<DBItemEx> v = context.CreateQuery<DBItemEx>(esql);

    与如下效果相同

     

     

    myContext context = new myContext();

    ObjectQuery<DBItemEx> v = context.DBItem.OfType<DBItemEx>();

     

     

     

    TREAT

    myContext context = new myContext();

    string esql = "SELECT TREAT(it AS [WindowsFormsApplication8].[DBItemEx]) FROM DBItem AS it";

    ObjectQuery<DbDataRecord> v = context.CreateQuery<DbDataRecord>(esql);

     

     

    foreach (DbDataRecord r in v)

    {

    DBItemEx obj = r[0] as DBItemEx;

    if (obj != null)

    {

    Console.WriteLine("{0}", obj.ItemID);

    }

    }

    与如下效果类似

     

     

    myContext context = new myContext();

    ObjectQuery<DBItemEx> v = context.DBItem.OfType<DBItemEx>();

     

    IS 类型判断

    myContext context = new myContext();

    string esql = "SELECT TREAT(it AS [WindowsFormsApplication8].[DBItemEx]) FROM DBItem AS it WHERE it IS OF ([WindowsFormsApplication8].[DBItemEx])";

    ObjectQuery<DbDataRecord> v = context.CreateQuery<DbDataRecord>(esql);

     

     

    foreach (DbDataRecord r in v)

    {

    DBItemEx obj = r[0] as DBItemEx;

    // if (obj != null)

    {

    Console.WriteLine("{0}", obj.ItemID);

    }

    }

    与如下效果类似

     

     

    myContext context = new myContext();

    ObjectQuery<DBItemEx> v = context.DBItem.OfType<DBItemEx>();

     

     

    esql Namespace

    使用SqlServer函数

    using SqlServer;

    myContext context = new myContext();

    string esql = "using SqlServer;select it.ItemValue ,LEN(it.NameID) as NameIDLEN from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1}",r["ItemValue"],r["NameIDLEN"]);

    }

    SqlServer.函数

    myContext context = new myContext();

    string esql = "select it.ItemValue ,SqlServer.LEN(it.NameID) as NameIDLEN from myContext.DBItemList as it";

     

    ObjectQuery<DbDataRecord> query = context.CreateQuery<DbDataRecord>(esql);

     

    foreach (DbDataRecord r in query)

    {

    Console.WriteLine("{0},{1}",r["ItemValue"],r["NameIDLEN"]);

    }

    SELECT

    1 AS [C1],

    [Extent1].[ItemValue] AS [ItemValue],

    LEN([Extent1].[NameID]) AS [C2]

    FROM [dbo].[DBItemList] AS [Extent1]

     

     

    使用NET的数据类型

     

    myContext context = new myContext();

     

    string esql = "using System;select value CAST(it.ItemValue as String) from myContext.DBItemList as it";

     

    ObjectQuery<string> query = context.CreateQuery<string>(esql);

     

    foreach (string r in query)

    {

    Console.WriteLine(r);

    }

    myContext context = new myContext();

     

    // ObjectQuery<typeTest> query = context.typeTest.Where("it.d==DATETIME'1977-11-11 00:00:00.000'");

    ObjectQuery<typeTest> query = context.typeTest.Where("it.d==cast('1977-11-11' as System.DateTime)");

     

    foreach (typeTest r in query)

    {

    Console.WriteLine("{0},{1},{2},{3},{4},{5}",r.a,r.b,r.c,r.d,r.e,r.值);

    }

     

    esql关系,导航

    KEY

    myContext context = new myContext();

    string esql="SELECT VALUE [TargetEntity] FROM (SELECT VALUE x FROM [myContext].[FK_DBItemList_DBItem] AS x WHERE Key(x.[DBItem]) = ROW(@EntityKeyValue1 AS EntityKeyValue1)) AS [AssociationEntry] INNER JOIN [myContext].[DBItemList] AS [TargetEntity] ON Key([AssociationEntry].[DBItemList]) = Key(Ref([TargetEntity]))";

     

    ObjectQuery<DBItemList> dbitemlist = context.CreateQuery<DBItemList>(esql, new ObjectParameter("EntityKeyValue1", "a"));

     

    foreach (DBItemList r in dbitemlist)

    {

    Console.WriteLine("{0},{1},{2}", r.AutoId, r.ItemValue, r.NameID);

    }

    效果同下

     

    myContext context = new myContext();

     

    ObjectQuery<DBItemList> dbitemlist = context.DBItem.First(p => p.ItemID == "a").DBItemList.CreateSourceQuery();

     

    foreach (DBItemList r in dbitemlist)

    {

    Console.WriteLine("{0},{1},{2}", r.AutoId, r.ItemValue, r.NameID);

    }

     

     

     

     

  • 相关阅读:
    Docker系统知识整理(从安装到熟练操作)
    Dockerfile 文件介绍
    Cmake命令之add_subdirectory介绍
    Cmake实战指南
    cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command
    cmake:选择编译器及设置编译器选项
    Task异常
    单元测试误区
    网络的核心概念
    java~使用枚举来实现接口的多态
  • 原文地址:https://www.cnblogs.com/foundation/p/1304703.html
Copyright © 2011-2022 走看看