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    esqlNamespace    19

10.1    使用SqlServer函数    19

10.2    使用NET的数据类型    20

11    esql关系,导航    20

11.1    KEY    20

 

 

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

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 WHEREit.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:

 

 

*/

 
 
 

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

 
 

Skip与Top一起使用

 
 
 

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:

 

 

*/

 
 
 

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:

 

 

*/

 
 
 

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:

 

 

*/

 
 
 

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

 

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值