📄 nbear - 支持基于操作符重载的强类型where及orderby查询 - teddy's knowledge base - 博客园.htm
字号:
<LI style="MARGIN-RIGHT: 4px; TEXT-ALIGN: right">--flyinging之路
<LI style="WORD-BREAK: break-all"><A
id=SingleColumn1_ctl04_CommentList_ctl05_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/23/523807.html#570074">5. re:
NBear案例源码 - 简易AJAX留言板 [Updated 10/31 Powered by NBear V3.0.0 preview]</A>
<LI style="WORD-BREAK: break-all">在同事的推荐下来看这个框架,感觉很不错,回家再仔细看看
<LI style="MARGIN-RIGHT: 4px; TEXT-ALIGN: right">--假正经哥哥[匿名] </LI></UL></DIV>
<H3>阅读排行榜</H3>
<DIV class=RecentComment>
<UL style="WORD-BREAK: break-all">
<LI><A id=SingleColumn1__3fcc82b_TopList_ctl01_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/12/30/308407.aspx">1. 没有ORM或代码生成数据就不能持久化了?
- 用范型技术代替代码生成!(9606)</A>
<LI><A id=SingleColumn1__3fcc82b_TopList_ctl02_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/06/11/172737.aspx">2. .Net环境下基于Ajax的MVC方案(9428)</A>
<LI><A id=SingleColumn1__3fcc82b_TopList_ctl03_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/05/11/153561.aspx">3. Asp.Net中页面运行时动态载入的UserControl内元素的事件处理的注意事项(7374)</A>
<LI><A id=SingleColumn1__3fcc82b_TopList_ctl04_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/07/21/197315.aspx">4. O/R
Mapping中对象关系映射解决方案汇总(7151)</A>
<LI><A id=SingleColumn1__3fcc82b_TopList_ctl05_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/04/18/376067.aspx">5. .Net
2.0: Entity as DTO vs Dataset as DTO / Xml Serialization vs JSON
Serialization(6560)</A> </LI></UL></DIV>
<H3>评论排行榜</H3>
<DIV class=RecentComment>
<UL style="WORD-BREAK: break-all">
<LI><A id=SingleColumn1__2490bfd_TopList_ctl01_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/08/04/467894.aspx">1. NBear中文用户手册发布(104)</A>
<LI><A id=SingleColumn1__2490bfd_TopList_ctl02_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/01/545885.aspx">2. NBearV3.0.0
Preview发布 - 全新ORM实现</A>
<LI><A id=SingleColumn1__2490bfd_TopList_ctl03_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/09/09/494036.aspx">3. NBearV2视频教学系列总索引,欢迎多提意见和建议[09/21更新至IoC篇](63)</A>
<LI><A id=SingleColumn1__2490bfd_TopList_ctl04_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/02/03/101488.aspx">4. 51Job职位搜索助手(源码)(58)</A>
<LI><A id=SingleColumn1__2490bfd_TopList_ctl05_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2005/12/30/308407.aspx">5. 没有ORM或代码生成数据就不能持久化了?
- 用范型技术代替代码生成!(50)</A> </LI></UL></DIV>
<H3>60天内阅读排行</H3>
<DIV class=RecentComment>
<UL>
<LI><A id=SingleColumn1__2554a75_TopList_ctl01_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/10/08/523807.aspx">1. NBear案例源码
- 简易AJAX留言板 [Updated 10/31 Powered by NBear V3.0.0 preview](4832)</A>
<LI><A id=SingleColumn1__2554a75_TopList_ctl02_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/01/545885.aspx">2. NBearV3.0.0
Preview发布 - 全新ORM实现</A>
<LI><A id=SingleColumn1__2554a75_TopList_ctl03_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/03/549118.aspx">3. NBearV3
Step by Step教程——ORM篇(2614)</A>
<LI><A id=SingleColumn1__2554a75_TopList_ctl04_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/09/554823.aspx">4. NBearV3——ORM实体关系设计速查手册(2194)</A>
<LI><A id=SingleColumn1__2554a75_TopList_ctl05_Hyperlink1
href="http://www.cnblogs.com/teddyma/archive/2006/11/07/553562.aspx">5. NBearV3中文教程总目录(1848)</A>
</LI></UL></DIV></DIV>
<DIV id=main>
<DIV class=post>
<H2><A id=viewpost1_TitleUrl
href="http://www.cnblogs.com/teddyma/archive/2006/08/27/487843.html">NBear -
支持基于操作符重载的强类型Where及OrderBy查询</A> </H2>
<P>从v2.2.1版起,<A style="COLOR: #0000ff"
href="http://sf.net/projects/nbear">NBear</A>开始支持强类型的实体查询语法。例如,我们可以以如下的语法查询需要的数据:</P>
<P><SPAN
style="FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">[] users =
gateway.Select<</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">>(</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">_Entity.</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">.Id
> 5 | _Entity.</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">.LoginId
== </SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #800000; FONT-FAMILY: 'Verdana'">"teddy"</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">,
_Entity.</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">.Id.Desc
& _Entity.</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">.LoginId.Asc</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">);</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'"> </SPAN></P>
<P>注意黑体部分,Select函数的两个参数分别为两个强类型表达式,一个是一组查询条件,另一个是排序条件。 </P>
<P>以上代码等价于: </P>
<P><SPAN
style="FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">[] users =
gateway.Select<</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #008080; FONT-FAMILY: 'Verdana'">LocalUser</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">>(</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">"[Id]
> @Id or [LoginId] = @LoginId</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">"</SPAN><SPAN
style="FONT-WEIGHT: bold; FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">,
"[Id] desc, [LoginId]", new object[] { 5, "teddy" }</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'">);</SPAN><SPAN
style="FONT-SIZE: 9pt; COLOR: #000000; FONT-FAMILY: 'Verdana'"> </SPAN></P>
<P>我们可以看到,采用第一种语法的好处有: <BR><BR>· 强类型,对于代码错误拥有编译器错误检查; </P>
<P>· 更直观; </P>
<P>· 独立与数据库特定的SQL语法,从而隔离了业务层和特定数据库的耦合; </P>
<P><SPAN style="FONT-WEIGHT: bold">使用Entity Configurator生成强类型实体查询代码</SPAN></P>
<P>要让程序能够访问到_Entity命名空间下的这些强类型查询对象,需要先使用Entity Configurator生成强类型实体查询代码。只需在Entity
Configurator中载入实体程序集,设置要对应的元数据,点击工具的Code->Generate EntityQuery
Code菜单项,再将生成的代码复制到需要的任意程序集中,生成的代码及包含了所有实体的强类型查询对象。</P>
<P><SPAN style="FONT-WEIGHT: bold">可用操作符</SPAN></P>
<P>NBear的像类型实体查询语法支持的操作符有:&(与),|(或),==(等于),!=(不等于),>(大于),<(小与),>=(大于等于),<=(小于等于),!(否),以及.Like()注意,Like是一个函数,可以以_Entity.User.LoginId.Like("teddy")这样的方式使用。</P>
<P>对于OrderBy部分,唯一的可用操作符是&,即表示组合多个排序条件。<BR><BR><STRONG>代码示例</STRONG><BR><BR>下面的代码是使用Entity
Configurator工具为<A style="COLOR: #0000ff"
href="http://www.cnblogs.com/teddyma/archive/2006/08/25/486312.html">使用Entity
Configurator设置实体元数据、生成数据库创建脚本</A>一文中所示的实体生成的强类型实体查询代码:<BR><BR></P>
<DIV
style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/None.gif"
align=top><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">namespace</SPAN><SPAN
style="COLOR: #000000"> _Entity<BR><IMG
id=Codehighlighter1_26_3003_Open_Image
onclick="this.style.display='none'; Codehighlighter1_26_3003_Open_Text.style.display='none'; Codehighlighter1_26_3003_Closed_Image.style.display='inline'; Codehighlighter1_26_3003_Closed_Text.style.display='inline';"
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/ExpandedBlockStart.gif"
align=top><IMG id=Codehighlighter1_26_3003_Closed_Image style="DISPLAY: none"
onclick="this.style.display='none'; Codehighlighter1_26_3003_Closed_Text.style.display='none'; Codehighlighter1_26_3003_Open_Image.style.display='inline'; Codehighlighter1_26_3003_Open_Text.style.display='inline';"
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/ContractedBlock.gif"
align=top> </SPAN><SPAN
id=Codehighlighter1_26_3003_Closed_Text
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/dot.gif"></SPAN><SPAN
id=Codehighlighter1_26_3003_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/InBlock.gif"
align=top> </SPAN><SPAN
style="COLOR: #0000ff">public</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">class</SPAN><SPAN
style="COLOR: #000000"> AgentUser<BR><IMG
id=Codehighlighter1_67_451_Open_Image
onclick="this.style.display='none'; Codehighlighter1_67_451_Open_Text.style.display='none'; Codehighlighter1_67_451_Closed_Image.style.display='inline'; Codehighlighter1_67_451_Closed_Text.style.display='inline';"
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/ExpandedSubBlockStart.gif"
align=top><IMG id=Codehighlighter1_67_451_Closed_Image style="DISPLAY: none"
onclick="this.style.display='none'; Codehighlighter1_67_451_Closed_Text.style.display='none'; Codehighlighter1_67_451_Open_Image.style.display='inline'; Codehighlighter1_67_451_Open_Text.style.display='inline';"
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/ContractedSubBlock.gif"
align=top> </SPAN><SPAN
id=Codehighlighter1_67_451_Closed_Text
style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/dot.gif"></SPAN><SPAN
id=Codehighlighter1_67_451_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/InBlock.gif"
align=top> </SPAN><SPAN
style="COLOR: #0000ff">public</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">static</SPAN><SPAN
style="COLOR: #000000"> PropertyItem LoginId </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN
style="COLOR: #000000"> PropertyItem(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">LoginId</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">[</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">@</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG
src="NBear - 支持基于操作符重载的强类型Where及OrderBy查询 - Teddy's Knowledge Base - 博客园_files/InBlock.gif"
align=top> </SPAN><SPAN
style="COLOR: #0000ff">public</SPAN><SPAN
style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">static</SPAN><SPAN
style="COLOR: #000000"> PropertyItem Id </SPAN><SPAN
style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN
style="COLOR: #0000ff">new</SPAN><SPAN
style="COLOR: #000000"> PropertyItem(</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Id</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">[</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">]</SPAN><SPAN
style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -