• esql的查询结果集 ObjectQuery


    ADO.NET Entity Framework(5)esql

    http://www.pin5i.com/showtopic.aspx?forumid=180&topicid=20801&forumpage=1&go=prev

    比起 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);
    }
  • 相关阅读:
    Codeforces ECR 83 C. Adding Powers (位运算)
    Codeforces Round #636div3 D. Constant Palindrome Sum (划分区间,差分)
    Codeforces Round #603 C. Everyone is a Winner!
    Centos7 下搭建SVN + Apache 服务器 风行天下
    完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)基础环境搭建 风行天下
    云计算的理解 风行天下
    Python之路3【知识点】白话Python编码和文件操作 风行天下
    C#中TreeView组件使用方法初步
    复制文件时explorer.exe出错解决方法
    C# 里TreeView绑定数据库实现分类
  • 原文地址:https://www.cnblogs.com/liufei88866/p/1447115.html
Copyright © 2020-2023  润新知