﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-网摘-文章分类-Linq</title><link>http://www.blogjava.net/jvict/category/34370.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 30 Dec 2008 01:01:15 GMT</lastBuildDate><pubDate>Tue, 30 Dec 2008 01:01:15 GMT</pubDate><ttl>60</ttl><item><title>查看Linq运行时生成的SQL语句</title><link>http://www.blogjava.net/jvict/articles/249029.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 29 Dec 2008 15:58:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249029.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249029.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249029.html</trackback:ping><description><![CDATA[<span id="span_9391">&nbsp;
<p>原文:http://space.cnblogs.com/question/3085/<br />
<br />
如果你的sql server 不是express版本的话，用sql server 的sql server profile ;<br />
工具=&gt;sql server profile&nbsp; 新建跟踪，可以监视到所有的sql<br />
还可看到IO操作，及执行时间</p>
<br />
&nbsp;
<p>在VS2008中编写显示日志</p>
<p>Log属性用于将SQL查询或命令打印到TextReader。此方法对了解 LINQ to SQL 功能和调试特定的问题可能很有用。 </p>
<p>下面的示例使用Log属性在SQL代码执行前在控制台窗口中显示此代码。我们可以将此属性与查询、插入、更新和删除命令一起使用。</p>
<pre class="code"><span style="color: green">//关闭日志功能
//db.Log = null;
//使用日志功能：日志输出到控制台窗口
</span>db.Log = <span style="color: #2b91af">Console</span>.Out;
<span style="color: blue">var </span>q = <span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">where </span>c.City == <span style="color: #a31515">"London"
</span><span style="color: blue">select </span>c;
<span style="color: green">//日志输出到文件
</span><span style="color: #2b91af">StreamWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StreamWriter</span>(Server.MapPath(<span style="color: #a31515">"log.txt"</span>), <span style="color: blue">true</span>);
db.Log = sw;
<span style="color: blue">var </span>q = <span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">where </span>c.City == <span style="color: #a31515">"London"
</span><span style="color: blue">select </span>c;
sw.Close();</pre>
</span>
 <img src ="http://www.blogjava.net/jvict/aggbug/249029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-29 23:58 <a href="http://www.blogjava.net/jvict/articles/249029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linq to sql取出随机记录/多表查询/将查询出的结果生成xml</title><link>http://www.blogjava.net/jvict/articles/249027.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 29 Dec 2008 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249027.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249027.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249027.html</trackback:ping><description><![CDATA[<p>原文:http://blog.csdn.net/yjmyzz/archive/2008/03/28/2226173.aspx<br />
在手写sql的年代，如果想从sqlserver数据库随机取几条数据，可以利用order by NewId()轻松实现，要实现多表查询也可以用select * from A,B Where A.ID=B.ID做到，但这些功能到了linq to sql中如何实现呢？</p>
<p>关键点:<br />
1.随机排序问题:可以用 Select(d=&gt; new {NewId=new Guid()}).OrderBy(d=&gt;d.NewId)达到order by NewId()的效果<br />
2.多表查询 <br />
from a in TableA <br />
from b in TableB<br />
where a.ID == b.ID</p>
<p>另外利用linq to xml还可以轻易将查询出来的结果保存成xml(这一点比传统xml的方法确实要新颖很多)</p>
<p>详细代码可参考我在一个项目中的示例(功能为随机取机10条产品视频的记录，并生成xml供播放器调用)</p>
<div style="border-right: windowtext 0.5pt solid; padding-right: 5.4pt; border-top: windowtext 0.5pt solid; padding-left: 5.4pt; background: #e6e6e6; padding-bottom: 4px; border-left: windowtext 0.5pt solid; width: 95%; word-break: break-all; padding-top: 4px; border-bottom: windowtext 0.5pt solid">
<div><img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;(DBDataContext&nbsp;db&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DBDataContext(Database.ConnectionString))<br />
<img id="_80_2347_Open_Image" onclick="this.style.display='none'; document.getElementById('_80_2347_Open_Text').style.display='none'; document.getElementById('_80_2347_Closed_Image').style.display='inline'; document.getElementById('_80_2347_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="_80_2347_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_80_2347_Closed_Text').style.display='none'; document.getElementById('_80_2347_Open_Image').style.display='inline'; document.getElementById('_80_2347_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_80_2347_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">...</span><span id="_80_2347_Open_Text"><span style="color: #000000">{<br />
<img id="_200_213_Open_Image" onclick="this.style.display='none'; document.getElementById('_200_213_Open_Text').style.display='none'; document.getElementById('_200_213_Closed_Image').style.display='inline'; document.getElementById('_200_213_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_200_213_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_200_213_Closed_Text').style.display='none'; document.getElementById('_200_213_Open_Image').style.display='inline'; document.getElementById('_200_213_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;q&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;db.T_Shops.Where(s&nbsp;</span><span style="color: #000000">=&gt;</span><span style="color: #000000">&nbsp;s.F_ID&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Guid(</span><span style="color: #000000">"</span><span style="color: #000000">00000000-0000-0000-0000-000000000001</span><span style="color: #000000">"</span><span style="color: #000000">)).Select(s&nbsp;</span><span style="color: #000000">=&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span id="_200_213_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">...</span><span id="_200_213_Open_Text"><span style="color: #000000">{&nbsp;s.F_AutoID&nbsp;}</span></span><span style="color: #000000">).First();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;_ShopAutoId&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;q.F_AutoID.ToString();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;query&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(from&nbsp;v&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;db.V_ProductVideos<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;pv&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;db.V_ProductTV<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;v.F_ShopID&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Guid(</span><span style="color: #000000">"</span><span style="color: #000000">00000000-0000-0000-0000-000000000001</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_ProductID&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;pv.F_ID&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pv.F_Status&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pv.F_isShow&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_Status&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_isShow&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_ProductStatus&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000"><br />
<img id="_860_1242_Open_Image" onclick="this.style.display='none'; document.getElementById('_860_1242_Open_Text').style.display='none'; document.getElementById('_860_1242_Closed_Image').style.display='inline'; document.getElementById('_860_1242_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="_860_1242_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_860_1242_Closed_Text').style.display='none'; document.getElementById('_860_1242_Open_Image').style.display='inline'; document.getElementById('_860_1242_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_860_1242_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">...</span><span id="_860_1242_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_VideoS,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_VideoP,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_VideoW,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_VideoL,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_ClsAutoID,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_ProductName,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.F_ProductAutoID,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NewId&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Utils.NewComb()<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;).OrderBy(p&nbsp;</span><span style="color: #000000">=&gt;</span><span style="color: #000000">&nbsp;p.NewId).Take(</span><span style="color: #000000">10</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">利用linq&nbsp;to&nbsp;xml生成xml</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XDocument&nbsp;doc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XDocument(<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XElement(</span><span style="color: #000000">"</span><span style="color: #000000">flvLists</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;from&nbsp;d&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;query<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;(<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XElement(<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">item</span><span style="color: #000000">"</span><span style="color: #000000">,<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">title_p</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;d.F_VideoP),<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">title_s</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;d.F_VideoS),<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">name</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;Utils.NoHtml(d.F_ProductName,&nbsp;</span><span style="color: #000000">500</span><span style="color: #000000">)),<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;XAttribute(</span><span style="color: #000000">"</span><span style="color: #000000">link</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">http://www.cntvs.com/product/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;d.F_ClsAutoID.ToString()&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;_ShopAutoId&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;d.F_ProductAutoID)<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))));<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doc.Save(Server.MapPath(</span><span style="color: #000000">"</span><span style="color: #000000">~/upload/xml/tvvideo.xml</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.Connection.Close();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/249027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-29 23:46 <a href="http://www.blogjava.net/jvict/articles/249027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转自雨痕]LINQ to SQL - Delay Loaded </title><link>http://www.blogjava.net/jvict/articles/249022.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 29 Dec 2008 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249022.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249022.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249022.html</trackback:ping><description><![CDATA[<div class="postBody">
<p>原文: <a href="http://www.rainsts.net/article.asp?id=550"><font color="#a91718">http://www.rainsts.net/article.asp?id=550</font></a></p>
<p><font color="#a91718"></font>&nbsp;</p>
<p>对 ORM 而言，延迟加载(也叫 Lazy Loading)是必须的，毕竟当我们只是获取用户基本信息时，总不能动不动就返回大段的用户个人简介不是。<br />
<br />
在 VS 2008 O/R Designer 中，很容易找到 Delay Loaded 的设置。<br />
<br />
</p>
<div style="overflow-x: auto; width: 100%"><a href="http://www.rainsts.net/uploads/200708/27_133811_snap1.gif" target="_blank"><img alt="uploads/200708/27_133811_snap1.gif" src="http://www.rainsts.net/uploads/200708/27_133811_snap1.gif" /></a></div>
<p><br />
<br />
只是当我在自动生成的代码中找寻这个设置时，着实迷糊了半天。基于惯性思维，我查看了几乎所有的特性(Attribute)声明，却一无所获，最后才发觉这个家伙竟然是这个样子。<br />
<br />
<strong>Delay Loaded = False</strong> </p>
<div class="code">[Table(Name="dbo.[User]")]<br />
public partial class User : INotifyPropertyChanging, INotifyPropertyChanged<br />
{<br />
&nbsp;&nbsp;private string _Job;<br />
}</div>
<p><br />
<strong>Delay Loaded = True</strong> </p>
<div class="code">[Table(Name="dbo.[User]")]<br />
public partial class User : INotifyPropertyChanging, INotifyPropertyChanged<br />
{<br />
&nbsp;&nbsp;private System.Data.Linq.Link&lt;string&gt; _Job;<br />
}</div>
<p><br />
习惯害人~~~~ 接下来我们测试一下延迟加载的作用。<br />
</p>
<div class="code">using (DataClasses1DataContext context = new DataClasses1DataContext())<br />
{<br />
&nbsp;&nbsp;context.Log = Console.Out;<br />
<br />
&nbsp;&nbsp;var user = (from u in context.Users where u.Name == "user1" select u).FirstOrDefault();<br />
&nbsp;&nbsp;Console.WriteLine(user.Name);<br />
&nbsp;&nbsp;Console.WriteLine(user.Job);<br />
}</div>
<p><br />
Delay Loaded = False 输出<br />
</p>
<div class="code">SELECT TOP 1 [t0].[Id], [t0].[Name], [t0].[Age], [t0].[Job]<br />
FROM [dbo].[User] AS [t0]<br />
WHERE [t0].[Name] = @p0<br />
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]<br />
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1<br />
<br />
user1<br />
job</div>
<p><br />
Delay Loaded = True 输出<br />
</p>
<div class="code">SELECT TOP 1 [t0].[Id], [t0].[Name], [t0].[Age]<br />
FROM [dbo].[User] AS [t0]<br />
WHERE [t0].[Name] = @p0<br />
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]<br />
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1<br />
<br />
user1<br />
SELECT [t0].[Job]<br />
FROM [dbo].[User] AS [t0]<br />
WHERE [t0].[Name] = @p0<br />
-- @p0: Input String (Size = 5; Prec = 0; Scale = 0) [user1]<br />
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1<br />
<br />
job</div>
<p><br />
当设置延迟加载后，查询 User 时并没有返回 Job 字段值，只有当访问该属性时才进行了第二次 SQL 操作，很显然这就是我们所需要的。延迟加载虽然很有用，但并不表示我们应该将 n 多的 Column 设置成 Delay Loaded = true，或许你要做的是创建另外一个 One-to-One / Base-to-Detail。<br />
<br />
<strong>注意！</strong>当 "context.DeferredLoadingEnabled = false" 或 "context.ObjectTrackingEnabled = false" 时，都会导致 Delay Loaded 失效，不再进行延迟字段载入操作。 </p>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/249022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-29 23:35 <a href="http://www.blogjava.net/jvict/articles/249022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINQ体验(6)——LINQ to SQL语句之Join和Order By </title><link>http://www.blogjava.net/jvict/articles/249014.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Mon, 29 Dec 2008 15:07:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/249014.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/249014.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/249014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/249014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/249014.html</trackback:ping><description><![CDATA[<h1>原文:http://www.cnblogs.com/lyj/archive/2008/01/24/1051495.html</h1>
<h1>Join操作</h1>
<p><strong>适用场景</strong>：在我们表关系中有一对一关系，一对多关系，多对多关系等。对各个表之间的关系，就用这些实现对多个表的操作。</p>
<p><strong>说明</strong>：在Join操作中，分别为Join(Join查询), SelectMany(Select一对多选择)和GroupJoin(分组Join查询)。<br />
该扩展方法对两个序列中键匹配的元素进行inner join操作</p>
<h1>SelectMany</h1>
<p><strong>说明</strong>：我们在写查询语句时，如果被翻译成SelectMany需要满足2个条件。1：查询语句中没有join和into，2：必须出现EntitySet。在我们表关系中有一对一关系，一对多关系，多对多关系等，下面分别介绍一下。 </p>
<h2>1.一对多关系(1 to Many)：</h2>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">from </span>o <span style="color: blue">in </span>c.Orders
<span style="color: blue">where </span>c.City == <span style="color: #a31515">"London"
</span><span style="color: blue">select </span>o;</pre>
<p>语句描述：Customers与Orders是一对多关系。即Orders在Customers类中以EntitySet形式出现。所以第二个from是从c.Orders而不是db.Orders里进行筛选。这个例子在From子句中使用外键导航选择伦敦客户的所有订单。</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>p <span style="color: blue">in </span>db.Products
<span style="color: blue">where </span>p.Supplier.Country == <span style="color: #a31515">"USA" </span>&amp;&amp; p.UnitsInStock == 0
<span style="color: blue">select </span>p;</pre>
<p>语句描述：这一句使用了p.Supplier.Country条件，间接关联了Supplier表。这个例子在Where子句中使用外键导航筛选其供应商在美国且缺货的产品。生成SQL语句为：</p>
<pre class="code"><span style="color: blue">SELECT </span>[t0].[ProductID], [t0].[ProductName], [t0].[SupplierID],
[t0].[CategoryID],[t0].[QuantityPerUnit],[t0].[UnitPrice],
[t0].[UnitsInStock], [t0].[UnitsOnOrder],[t0].[ReorderLevel],
[t0].[Discontinued] <span style="color: blue">FROM </span>[dbo].[Products] <span style="color: blue">AS </span>[t0]
<span style="color: blue">LEFT OUTER JOIN </span>[dbo].[Suppliers] <span style="color: blue">AS </span>[t1] <span style="color: blue">ON
</span>[t1].[SupplierID] = [t0].[SupplierID]
<span style="color: blue">WHERE </span>([t1].[Country] = @p0) <span style="color: blue">AND </span>([t0].[UnitsInStock] = @p1)
<span style="color: green">-- @p0: Input NVarChar (Size = 3; Prec = 0; Scale = 0) [USA]
-- @p1: Input Int (Size = 0; Prec = 0; Scale = 0) [0]</span></pre>
<h2>2.多对多关系(Many to Many)：</h2>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>e <span style="color: blue">in </span>db.Employees
<span style="color: blue">from </span>et <span style="color: blue">in </span>e.EmployeeTerritories
<span style="color: blue">where </span>e.City == <span style="color: #a31515">"Seattle"
</span><span style="color: blue">select new
</span>{
e.FirstName,
e.LastName,
et.Territory.TerritoryDescription
};</pre>
<p>说明：多对多关系一般会涉及三个表(如果有一个表是自关联的，那有可能只有2个表)。这一句语句涉及Employees, EmployeeTerritories, Territories三个表。它们的关系是1：M：1。Employees和Territories没有很明确的关系。</p>
<p>语句描述：这个例子在From子句中使用外键导航筛选在西雅图的雇员，同时列出其所在地区。这条生成SQL语句为：</p>
<pre class="code"><span style="color: blue">SELECT </span>[t0].[FirstName], [t0].[LastName], [t2].[TerritoryDescription]
<span style="color: blue">FROM </span>[dbo].[Employees] <span style="color: blue">AS </span>[t0] <span style="color: blue">CROSS JOIN </span>[dbo].[EmployeeTerritories]
<span style="color: blue">AS </span>[t1] <span style="color: blue">INNER JOIN </span>[dbo].[Territories] <span style="color: blue">AS </span>[t2] <span style="color: blue">ON
</span>[t2].[TerritoryID] = [t1].[TerritoryID]
<span style="color: blue">WHERE </span>([t0].[City] = @p0) <span style="color: blue">AND </span>([t1].[EmployeeID] = [t0].[EmployeeID])
<span style="color: green">-- @p0: Input NVarChar (Size = 7; Prec = 0; Scale = 0) [Seattle]</span></pre>
<h2>3.自联接关系：</h2>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>e1 <span style="color: blue">in </span>db.Employees
<span style="color: blue">from </span>e2 <span style="color: blue">in </span>e1.Employees
<span style="color: blue">where </span>e1.City == e2.City
<span style="color: blue">select new </span>{
FirstName1 = e1.FirstName, LastName1 = e1.LastName,
FirstName2 = e2.FirstName, LastName2 = e2.LastName,
e1.City
};</pre>
<p>语句描述：这个例子在select 子句中使用外键导航筛选成对的雇员，每对中一个雇员隶属于另一个雇员，且两个雇员都来自相同城市。生成SQL语句为：</p>
<pre class="code"><span style="color: blue">SELECT </span>[t0].[FirstName] <span style="color: blue">AS </span>[FirstName1], [t0].[LastName] <span style="color: blue">AS </span>
[LastName1],[t1].[FirstName] <span style="color: blue">AS </span>[FirstName2], [t1].[LastName] <span style="color: blue">AS </span>
[LastName2],[t0].[City] <span style="color: blue">FROM </span>[dbo].[Employees] <span style="color: blue">AS </span>[t0],
[dbo].[Employees] <span style="color: blue">AS </span>[t1] <span style="color: blue">WHERE </span>([t0].[City] = [t1].[City]) <span style="color: blue">AND </span>
([t1].[ReportsTo] = [t0].[EmployeeID])</pre>
<h1>GroupJoin</h1>
<p>像上面所说的，没有join和into，被翻译成SelectMany，同时有join和into时，那么就被翻译为GroupJoin。在这里into的概念是对其结果进行重新命名。</p>
<h2>1.双向联接(Two way join)：</h2>
<p>此示例显式联接两个表并从这两个表投影出结果：</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">join </span>o <span style="color: blue">in </span>db.Orders <span style="color: blue">on </span>c.CustomerID
<span style="color: blue">equals </span>o.CustomerID <span style="color: blue">into </span>orders
<span style="color: blue">select new
</span>{
c.ContactName,
OrderCount = orders.Count()
};</pre>
<p>说明：在一对多关系中，左边是1，它每条记录为c（from c in db.Customers），右边是Many，其每条记录叫做o ( join o in db.Orders )，每对应左边的一个c，就会有一组o，那这一组o，就叫做orders，也就是说，我们把一组o命名为orders，这就是into用途。这也就是为什么在select语句中，orders可以调用聚合函数Count。在T-SQL中，使用其内嵌的T-SQL返回值作为字段值。如图所示：</p>
<p><a href="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ16.gif" target="_blank"><img alt="GroupJoin示意图" src="http://lyj.cnblogs.com/images/cnblogs_com/lyj/LINQ/LINQ16.gif" /></a></p>
<p>生成SQL语句为：</p>
<pre class="code"><span style="color: blue">SELECT </span>[t0].[ContactName], (
<span style="color: blue">SELECT COUNT</span>(*)
<span style="color: blue">FROM </span>[dbo].[Orders] <span style="color: blue">AS </span>[t1]
<span style="color: blue">WHERE </span>[t0].[CustomerID] = [t1].[CustomerID]
) <span style="color: blue">AS </span>[OrderCount]
<span style="color: blue">FROM </span>[dbo].[Customers] <span style="color: blue">AS </span>[t0]</pre>
<h2>2.三向联接(There way join)：</h2>
<p>此示例显式联接三个表并分别从每个表投影出结果：</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">join </span>o <span style="color: blue">in </span>db.Orders <span style="color: blue">on </span>c.CustomerID
<span style="color: blue">equals </span>o.CustomerID <span style="color: blue">into </span>ords
<span style="color: blue">join </span>e <span style="color: blue">in </span>db.Employees <span style="color: blue">on </span>c.City
<span style="color: blue">equals </span>e.City <span style="color: blue">into </span>emps
<span style="color: blue">select new
</span>{
c.ContactName,
ords = ords.Count(),
emps = emps.Count()
};</pre>
<p>生成SQL语句为：</p>
<pre class="code"><span style="color: blue">SELECT </span>[t0].[ContactName], (
<span style="color: blue">SELECT COUNT</span>(*)
<span style="color: blue">FROM </span>[dbo].[Orders] <span style="color: blue">AS </span>[t1]
<span style="color: blue">WHERE </span>[t0].[CustomerID] = [t1].[CustomerID]
) <span style="color: blue">AS </span>[ords], (
<span style="color: blue">SELECT COUNT</span>(*)
<span style="color: blue">FROM </span>[dbo].[Employees] <span style="color: blue">AS </span>[t2]
<span style="color: blue">WHERE </span>[t0].[City] = [t2].[City]
) <span style="color: blue">AS </span>[emps]
<span style="color: blue">FROM </span>[dbo].[Customers] <span style="color: blue">AS </span>[t0]</pre>
<h2>3.左外部联接(Left Outer Join)：</h2>
<p>此示例说明如何通过使用 此示例说明如何通过使用DefaultIfEmpty() 获取左外部联接。在雇员没有订单时，DefaultIfEmpty()方法返回null：</p>
<pre class="code"><span style="color: blue">var</span> q =
<span style="color: blue">from </span>e <span style="color: blue">in </span>db.Employees
<span style="color: blue">join </span>o <span style="color: blue">in </span>db.Orders <span style="color: blue">on </span>e <span style="color: blue">equals </span>o.Employee <span style="color: blue">into </span>ords
<span style="color: blue">from </span>o <span style="color: blue">in </span>ords.DefaultIfEmpty()
<span style="color: blue">select new
</span>{
e.FirstName,
e.LastName,
Order = o
};</pre>
<p>说明：以Employees左表，Orders右表，Orders 表中为空时，用null值填充。Join的结果重命名ords，使用DefaultIfEmpty()函数对其再次查询。其最后的结果中有个Order，因为from o in ords.DefaultIfEmpty() 是对ords组再一次遍历，所以，最后结果中的Order并不是一个集合。但是，如果没有from o in ords.DefaultIfEmpty() 这句，最后的select语句写成select new { e.FirstName, e.LastName, Order = ords }的话，那么Order就是一个集合。</p>
<h2>4.投影的Let赋值(Projected let assignment)：</h2>
<p>说明：let语句是重命名。let位于第一个from和select语句之间。</p>
<p>这个例子从联接投影出最终&#8220;Let&#8221;表达式：</p>
<pre class="code"><span style="color: blue">var</span> q =
<span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">join </span>o <span style="color: blue">in </span>db.Orders <span style="color: blue">on </span>c.CustomerID
<span style="color: blue">equals </span>o.CustomerID <span style="color: blue">into </span>ords
<span style="color: blue">let </span>z = c.City + c.Country
<span style="color: blue">from </span>o <span style="color: blue">in </span>ords
<span style="color: blue">select new
</span>{
c.ContactName,
o.OrderID,
z
};</pre>
<h2>5.组合键(Composite Key)：</h2>
<p>这个例子显示带有组合键的联接：</p>
<pre class="code"><span style="color: blue">var</span> q =
<span style="color: blue">from </span>o <span style="color: blue">in </span>db.Orders
<span style="color: blue">from </span>p <span style="color: blue">in </span>db.Products
<span style="color: blue">join </span>d <span style="color: blue">in </span>db.OrderDetails
<span style="color: blue">on new
</span>{
o.OrderID,
p.ProductID
} <span style="color: blue">equals
new
</span>{
d.OrderID,
d.ProductID
}
<span style="color: blue">into </span>details
<span style="color: blue">from </span>d <span style="color: blue">in </span>details
<span style="color: blue">select new
</span>{
o.OrderID,
p.ProductID,
d.UnitPrice
};</pre>
<p>说明：使用三个表，并且用匿名类来说明：使用三个表，并且用匿名类来表示它们之间的关系。它们之间的关系不能用一个键描述清楚，所以用匿名类，来表示组合键。还有一种是两个表之间是用组合键表示关系的，不需要使用匿名类。</p>
<h2>6.可为null/不可为null的键关系(Nullable/Nonnullable Key Relationship)：</h2>
<p>这个实例显示如何构造一侧可为 null 而另一侧不可为 null 的联接：</p>
<pre class="code"><span style="color: blue">var</span> q =
<span style="color: blue">from </span>o <span style="color: blue">in </span>db.Orders
<span style="color: blue">join </span>e <span style="color: blue">in </span>db.Employees
<span style="color: blue">on </span>o.EmployeeID <span style="color: blue">equals
</span>(<span style="color: blue">int</span>?)e.EmployeeID <span style="color: blue">into </span>emps
<span style="color: blue">from </span>e <span style="color: blue">in </span>emps
<span style="color: blue">select new
</span>{
o.OrderID,
e.FirstName
};</pre>
<h1>Order By操作</h1>
<p><strong>适用场景</strong>：对查询出的语句进行排序，比如按时间排序等等。</p>
<p><strong>说明</strong>：按指定表达式对集合排序；延迟，：按指定表达式对集合排序；延迟，默认是升序，加上descending表示降序，对应的扩展方法是OrderBy和OrderByDescending</p>
<h2>1.简单形式</h2>
<p>这个例子使用 orderby 按雇用日期对雇员进行排序：</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>e <span style="color: blue">in </span>db.Employees
<span style="color: blue">orderby </span>e.HireDate
<span style="color: blue">select </span>e;</pre>
<p>说明：默认为升序</p>
<h2>2.带条件形式</h2>
<p>注意：Where和Order By的顺序并不重要。而在T-SQL中，Where和Order By有严格的位置限制。</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>o <span style="color: blue">in </span>db.Orders
<span style="color: blue">where </span>o.ShipCity == <span style="color: #a31515">"London"
</span><span style="color: blue">orderby </span>o.Freight
<span style="color: blue">select </span>o;</pre>
<p>语句描述：使用where和orderby按运费进行排序。</p>
<h2>3.降序排序</h2>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>p <span style="color: blue">in </span>db.Products
<span style="color: blue">orderby </span>p.UnitPrice <span style="color: blue">descending
select </span>p;</pre>
<h2>4.ThenBy</h2>
<p>语句描述：使用复合的 orderby 对客户进行排序，进行排序：</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>c <span style="color: blue">in </span>db.Customers
<span style="color: blue">orderby </span>c.City, c.ContactName
<span style="color: blue">select </span>c;</pre>
<p>说明：按多个表达式进行排序，例如先按City排序，当City相同时，按ContactName排序。这一句用Lambda表达式像这样写：</p>
<pre class="code"><span style="color: blue">var</span> q =
db.Customers
.OrderBy(c =&gt; c.City)
.ThenBy(c =&gt; c.ContactName).ToList();</pre>
<p>在T-SQL中没有ThenBy语句，其依然翻译为OrderBy，所以也可以用下面语句来表达：</p>
<pre class="code"><span style="color: blue">var </span>q =
db.Customers
.OrderBy(c =&gt; c.ContactName)
.OrderBy(c =&gt; c.City).ToList();</pre>
<p>所要注意的是，多个OrderBy操作时，级连方式是按逆序。对于降序的，用相应的降序操作符替换即可。</p>
<pre class="code"><span style="color: blue">var </span>q =
db.Customers
.OrderByDescending(c =&gt; c.City)
.ThenByDescending(c =&gt; c.ContactName).ToList();</pre>
<p>需要说明的是，OrderBy操作，不支持按type排序，也不支持匿名类。比如 </p>
<pre class="code"><span style="color: blue">var </span>q =
db.Customers
.OrderBy(c =&gt; <span style="color: blue">new
</span>{
c.City,
c.ContactName
}).ToList();</pre>
<p>会被抛出异常。错误是前面的操作有匿名类，再跟OrderBy时，比较的是类别。比如</p>
<pre class="code"><span style="color: blue">var </span>q =
db.Customers
.Select(c =&gt; <span style="color: blue">new
</span>{
c.City,
c.Address
})
.OrderBy(c =&gt; c).ToList();</pre>
<p>如果你想使用OrderBy(c =&gt; c)，其前提条件是，前面步骤中，所产生的对象的类别必须为C#语言的基本类型。比如下句，这里City为string类型。</p>
<pre class="code"><span style="color: blue">var </span>q =
db.Customers
.Select(c =&gt; c.City)
.OrderBy(c =&gt; c).ToList();</pre>
<h2>5.ThenByDescending</h2>
<p>这两个扩展方式都是用在OrderBy/OrderByDescending之后的，第一个ThenBy/ThenByDescending扩展方法作为第二位排序依据，第二个ThenBy/ThenByDescending则作为第三位排序依据，以此类推</p>
<pre class="code"><span style="color: blue">var </span>q =
<span style="color: blue">from </span>o <span style="color: blue">in </span>db.Orders
<span style="color: blue">where </span>o.EmployeeID == 1
<span style="color: blue">orderby </span>o.ShipCountry, o.Freight <span style="color: blue">descending
select </span>o;</pre>
<p>语句描述：使用orderby先按发往国家再按运费从高到低的顺序对 EmployeeID 1 的订单进行排序。</p>
<h2>6.带GroupBy形式</h2>
<pre class="code"><span style="color: blue">var</span> q =
<span style="color: blue">from </span>p <span style="color: blue">in </span>db.Products
<span style="color: blue">group </span>p <span style="color: blue">by </span>p.CategoryID<span style="color: blue"> into </span>g
<span style="color: blue">orderby </span>g.Key
<span style="color: blue">select new </span>{
g.Key,
MostExpensiveProducts =
<span style="color: blue">from </span>p2 <span style="color: blue">in </span>g
<span style="color: blue">where </span>p2.UnitPrice == g.Max(p3 =&gt; p3.UnitPrice)
<span style="color: blue">select </span>p2
};</pre>
<p>语句描述：使用orderby、Max 和 Group By 得出每种类别中单价最高的产品，并按 CategoryID 对这组产品进行排序。</p>
<p>本系列链接：<a href="http://www.cnblogs.com/lyj/archive/2008/03/24/1119671.html" target="_blank">LINQ体验系列文章导航</a></p>
<h2>LINQ推荐资源</h2>
<p>LINQ专题：<a href="http://kb.cnblogs.com/zt/linq/" target="_blank">http://kb.cnblogs.com/zt/linq/</a> 关于LINQ方方面面的入门、进阶、深入的文章。<br />
LINQ小组：<a href="http://space.cnblogs.com/group/linq/" target="_blank">http://space.cnblogs.com/group/linq/</a> 学习中遇到什么问题或者疑问提问的好地方。</p>
<p id="LyjSignature"><br />
作者：<a href="http://lyj.cnblogs.com/" target="_blank">李永京</a>（<a href="http://lyj.cnblogs.com/" target="_blank">YJingLee's Blog</a>）<br />
出处：<a href="http://lyj.cnblogs.com/" target="_blank">http://lyj.cnblogs.com</a><br />
本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。</p>
<img src ="http://www.blogjava.net/jvict/aggbug/249014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-29 23:07 <a href="http://www.blogjava.net/jvict/articles/249014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linq动态查询与模糊查询 (</title><link>http://www.blogjava.net/jvict/articles/246939.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 17 Dec 2008 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/246939.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/246939.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/246939.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/246939.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/246939.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文: http://www.cnblogs.com/killuakun/articles/1259389.html最近有个项目用Linq做的，有个复合搜索模糊查询的功能，有点麻烦，绕了好几个弯，最后是解决了，在这里分享一下我的处理过程，如果大家有更好的办法也请给我介绍一下。我用Linq还不熟，好多东西边查资料边做的。&nbsp;应用场景如下图，多条件复合搜索，很常见吧（但Li...&nbsp;&nbsp;<a href='http://www.blogjava.net/jvict/articles/246939.html'>阅读全文</a><img src ="http://www.blogjava.net/jvict/aggbug/246939.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-17 18:11 <a href="http://www.blogjava.net/jvict/articles/246939.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Linq 实现动态多条件查询</title><link>http://www.blogjava.net/jvict/articles/246929.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 17 Dec 2008 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/246929.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/246929.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/246929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/246929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/246929.html</trackback:ping><description><![CDATA[<div>private void ViewBinding()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expression&lt;Func&lt;TestTable, bool&gt;&gt; expr = n =&gt; GetCondition(n);
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var xQuery = DCDataContext.TestTables.Where&lt;TestTable&gt;(expr.Compile());</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.dataGridView1.DataSource = xQuery.ToList&lt;TestTable&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private bool GetCondition(TestTable tb)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool boolResult = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (txtUserNumber.Text.Trim() != string.Empty)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolResult &amp;= tb.UserNumber == int.Parse(txtUserNumber.Text.Trim());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (txtName.Text.Trim() != string.Empty)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolResult &amp;= tb.Name == txtName.Text.Trim();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (txtClassName.Text.Trim() != string.Empty)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolResult &amp;= tb.ClassName == txtClassName.Text.Trim();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return boolResult;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void button1_Click(object sender, EventArgs e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ViewBinding();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
</div>
</div>
<img src ="http://www.blogjava.net/jvict/aggbug/246929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-17 17:48 <a href="http://www.blogjava.net/jvict/articles/246929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINQ to SQL 运行时动态构建查询条件 </title><link>http://www.blogjava.net/jvict/articles/246928.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Wed, 17 Dec 2008 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/246928.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/246928.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/246928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/246928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/246928.html</trackback:ping><description><![CDATA[<p>原文: http://www.cnblogs.com/Snowdreams/archive/2008/07/18/1246308.html<br />
<br />
在进行数据查询时，经常碰到需要动态构建查询条件。使用LINQ实现这个需求可能会比以前拼接SQL语句更麻烦一些。本文介绍了3种运行时动态构建查询条件的方法。<br />
本文中的例子最终实现的都是同一个功能，从Northwind数据库Customers表中搜索出CompanyName列带有keywords中任意元素的项。keywords是个字符串数组，该数组长度在编译时是不确定的。思路及方法说明写在代码注释中.<br />
1.表达式树</p>
<div class="cnblogs_code"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;IEnumerable</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;GetCustomersFunc1(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;keywords)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_82_1402_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_1402_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_82_1402_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_1402_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_1402_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_1402_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_82_1402_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_1402_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_82_1402_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_82_1402_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataClassesDataContext&nbsp;dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataClassesDataContext();<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建一个静态类型为Customers的参数表达式</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterExpression&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Expression.Parameter(</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(Customers),&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">c</span><span style="color: #800000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建一个恒等于false的表达式,用于与下面的表达式取并集</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&nbsp;condition&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Expression.Constant(</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;keyword&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;keywords)<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_417_1123_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_417_1123_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_417_1123_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_417_1123_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_417_1123_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_417_1123_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_417_1123_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_417_1123_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_417_1123_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_417_1123_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">该表达式用于判断一个Customers类的CompanyName属性的值是否包含了关键字keyword</span><span style="color: #008000"><br />
</span><span style="color: #008080">13</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression&nbsp;con&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Expression.Call(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.Property(c,&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(Customers).GetProperty(</span><span style="color: #800000">"</span><span style="color: #800000">CompanyName</span><span style="color: #800000">"</span><span style="color: #000000">)),<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_716_734_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_716_734_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_716_734_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_716_734_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_716_734_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_716_734_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_716_734_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_716_734_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(</span><span style="color: #0000ff">string</span><span style="color: #000000">).GetMethod(</span><span style="color: #800000">"</span><span style="color: #800000">Contains</span><span style="color: #800000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Type[]&nbsp;</span><span id="Codehighlighter1_716_734_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_716_734_Open_Text"><span style="color: #000000">{&nbsp;</span><span style="color: #0000ff">typeof</span><span style="color: #000000">(</span><span style="color: #0000ff">string</span><span style="color: #000000">)&nbsp;}</span></span><span style="color: #000000">),<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression.Constant(keyword));<br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">与之前的condition表达式进行逻辑或运算。<br />
</span><span style="color: #008080">19</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">如果要查找的项需要包含keywords中的所有关键字,则可使用Expression.And(con,&nbsp;condition)<br />
</span><span style="color: #008080">20</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">并且将Expression&nbsp;condition&nbsp;=&nbsp;Expression.Constant(false);<br />
</span><span style="color: #008080">21</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">改成Expression&nbsp;condition&nbsp;=&nbsp;Expression.Constant(true);</span><span style="color: #008000"><br />
</span><span style="color: #008080">22</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;condition&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Expression.Or(con,&nbsp;condition);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">创建一个以一个Customers类作为参数并返回bool类型的委托</span><span style="color: #008000"><br />
</span><span style="color: #008080">26</span><span style="color: #008000"><img id="Codehighlighter1_1295_1300_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1295_1300_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1295_1300_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1295_1300_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1295_1300_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1295_1300_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1295_1300_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1295_1300_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Expression</span><span style="color: #000000">&lt;</span><span style="color: #000000">Func</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;end&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Expression.Lambda</span><span style="color: #000000">&lt;</span><span style="color: #000000">Func</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers,&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">(condition,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ParameterExpression[]&nbsp;</span><span id="Codehighlighter1_1295_1300_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1295_1300_Open_Text"><span style="color: #000000">{&nbsp;c&nbsp;}</span></span><span style="color: #000000">);<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">使用刚才构建的条件进行查询</span><span style="color: #008000"><br />
</span><span style="color: #008080">29</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;dc.Customers.Where(end);<br />
</span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
2.使用System.Linq.Dynamic<br />
<div class="cnblogs_code"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;IEnumerable</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;GetCustomersFunc2(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;keywords)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_82_629_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_629_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_82_629_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_629_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_629_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_629_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_82_629_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_629_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_82_629_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_82_629_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">需要引用System.Linq.Dynamic。Dynamic.cs文件可在LinqSamples中找到</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataClassesDataContext&nbsp;dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataClassesDataContext();<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;queryString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;keyword&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;keywords)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_300_492_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_300_492_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_300_492_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_300_492_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_300_492_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_300_492_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_300_492_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_300_492_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_300_492_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_300_492_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">原形为(c=&gt;c.CompanyName.Contains(keyword1))&nbsp;||&nbsp;(c=&gt;c.CompanyName.Contains(keyword2))&nbsp;||&nbsp;<img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queryString&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">CompanyName.Contains(\</span><span style="color: #800000">""</span><span style="color: #800000">&nbsp;+&nbsp;keyword&nbsp;+&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">\</span><span style="color: #800000">"</span><span style="color: #800000">)&nbsp;or&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">与false进行逻辑或运算,为了避免queryString中最后的or出现语法错误</span><span style="color: #008000"><br />
</span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;queryString&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">1=0</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;dc.Customers.Where(queryString);<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>3.披着Linq的外衣拼接SQL语句</p>
<div class="cnblogs_code"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;IEnumerable</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;GetCustomersFunc3(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;keywords)<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img id="Codehighlighter1_82_639_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_639_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_82_639_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_639_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_82_639_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_82_639_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_82_639_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_82_639_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_82_639_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_82_639_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">这个方法其实是伪Linq,核心还是在拼接SQL语句,所以就不多解释了</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataClassesDataContext&nbsp;dc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataClassesDataContext();<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;sqlQuery&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">SELECT&nbsp;[CustomerID],&nbsp;[CompanyName],&nbsp;[ContactName],&nbsp;[ContactTitle],&nbsp;[Address],&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlQuery&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">[City],&nbsp;[Region],&nbsp;[PostalCode],[Country],&nbsp;[Phone],&nbsp;[Fax]&nbsp;FROM&nbsp;[dbo].[Customers]&nbsp;&nbsp;WHERE&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;keyword&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;keywords)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_467_551_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_467_551_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_467_551_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_467_551_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_467_551_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_467_551_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_467_551_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_467_551_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_467_551_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 alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_467_551_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlQuery&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">([CompanyName]&nbsp;LIKE&nbsp;'%</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;keyword&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">%'&nbsp;)&nbsp;OR&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlQuery&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">(1=0)</span><span style="color: #800000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;dc.ExecuteQuery</span><span style="color: #000000">&lt;</span><span style="color: #000000">Customers</span><span style="color: #000000">&gt;</span><span style="color: #000000">(sqlQuery);<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
</span></div>
<img src ="http://www.blogjava.net/jvict/aggbug/246928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-12-17 17:46 <a href="http://www.blogjava.net/jvict/articles/246928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C# Linq 相关网址</title><link>http://www.blogjava.net/jvict/articles/226985.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 04 Sep 2008 07:45:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/226985.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/226985.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/226985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/226985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/226985.html</trackback:ping><description><![CDATA[C# Linq 学习专题: <a href="http://tech.it168.com/zt/linq/index.html">http://tech.it168.com/zt/linq/index.html</a><br />
Microsoft Linq <a href="http://www.microsoft.com/china/MSDN/library/netFramework/netframework/linqprojectovw.mspx?mfr=true">项目: http://www.microsoft.com/china/MSDN/library/netFramework/netframework/linqprojectovw.mspx?mfr=true</a> <br />
Linq To Sql进阶系列（一）-从映射讲起 <a href="http://hi.baidu.com/psc2006hedan/blog/item/00ba0e3bb4a9f9e915cecb25.html">1http://hi.baidu.com/psc2006hedan/blog/item/00ba0e3bb4a9f9e915cecb25.html</a> <br />
<br />
<span style="color: red">Linq <a href="http://blog.sina.com.cn/s/articlelist_1405560771_3_1.html">实例</a></span><a href="http://blog.sina.com.cn/s/articlelist_1405560771_3_1.html">: http://blog.sina.com.cn/s/articlelist_1405560771_3_1.html</a> <br />
<br />
<a>http://www.cnblogs.com/ch00694534/tag/LINQ/</a>
<img src ="http://www.blogjava.net/jvict/aggbug/226985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-09-04 15:45 <a href="http://www.blogjava.net/jvict/articles/226985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>LINQ学习入门教程（一） </title><link>http://www.blogjava.net/jvict/articles/226937.html</link><dc:creator>Documents</dc:creator><author>Documents</author><pubDate>Thu, 04 Sep 2008 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/jvict/articles/226937.html</guid><wfw:comment>http://www.blogjava.net/jvict/comments/226937.html</wfw:comment><comments>http://www.blogjava.net/jvict/articles/226937.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jvict/comments/commentRss/226937.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jvict/services/trackbacks/226937.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt"><strong>ASP.NET学习之路 原文: <a href="http://www.cnblogs.com/caodaiming/archive/2008/05/07/1187432.html">http://www.cnblogs.com/caodaiming/archive/2008/05/07/1187432.html<br />
</a><br />
LINQ 查询简介<br />
</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linq 是一跨各种数据源和数据格式的数据模型；它在查询是，始终是把它作为一种对象来操作，可以使用基本相同的编码模型查询和数据的转换XML，SQL，ADO数据等；<br />
<br />
<span style="font-size: 12pt"><strong>Linq查询的三个步骤<br />
</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在我们使用Linq来查询数据的时候我们都会按照这三个步骤来做，这是初学者应该记住<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.创建数据源，这里的数据源可以是数组，集合，XML，SQL等数据库<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.新建一个查询，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如： from xxxx in xxxxx where xxx select;这一种结构，注意的是，必须以from开头,select结尾<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.执行查询。在这里我们通常用到执行查询就是foreach来做，当然有for语句也可以，但后者在效率上没有前者好；<br />
<br />
下面我们就用这个三个步骤来做一个示例：<br />
<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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System;<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections.Generic;<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Linq;<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Text;<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #0000ff">using</span><span style="color: #000000">&nbsp;System.Collections;<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;LINQDemo<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Program<br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main(</span><span style="color: #0000ff">string</span><span style="color: #000000">[]&nbsp;args)<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;number&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[</span><span style="color: #800080">7</span><span style="color: #000000">]&nbsp;{&nbsp;</span><span style="color: #800080">1</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">3</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">4</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">5</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">6</span><span style="color: #000000">,&nbsp;</span><span style="color: #800080">7</span><span style="color: #000000">&nbsp;};&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">create&nbsp;Datasourse</span><span style="color: #008000"><br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;n&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;from&nbsp;num&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;number&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;(num&nbsp;</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">0</span><span style="color: #000000">)&nbsp;select&nbsp;num;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;create&nbsp;Query</span><span style="color: #008000"><br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;n)&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Query&nbsp;execution</span><span style="color: #008000"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(a.ToString());<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">}</span></div>
<span style="color: red">执行的结果：2，4，6</span><br />
首先建了一个int的数组作为数据源，其次创建了一个查询，最后执行了这个查询<br />
现在来看看是怎么来执行这个过程的，如图所示：<br />
<img style="width: 357px; height: 406px" height="406" alt="" src="http://images.cnblogs.com/cnblogs_com/caodaiming/Linq_Query.jpg" width="357" border="0" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;每执行查询时，同要去查询的条件中找，符合条件的数据，大家下来可以一步步的调试，就要可以清楚的看到他的执行步骤了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在上面一个示例是我们的数据源用的是一个int 的数组，刚来我们也说过数据源可以是XML ，数据库等<br />
我们来看看XML：<br />
<span style="color: #339966">using System.xml.Linq;<br />
XElement element = XElement.Load(@"cao.xml");</span><br />
用数据库作为数据源：<br />
<span style="color: #339966">using System.Data.Linq;<br />
DataContext dt = new DataContext(@"cao.mdf");</span><br />
在以后的文章中我会讲到这两种数据源，这里就不做示例了；<br />
<br />
接下来我们来看一个对ArrayList的一个查询示例：<br />
新建一个Student类：<br />
<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 id="Code_Closed_Image_210520" onclick="this.style.display='none'; Code_Closed_Text_210520.style.display='none'; Code_Open_Image_210520.style.display='inline'; Code_Open_Text_210520.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" /><img id="Code_Open_Image_210520" style="display: none" onclick="this.style.display='none'; Code_Open_Text_210520.style.display='none'; Code_Closed_Image_210520.style.display='inline'; Code_Closed_Text_210520.style.display='inline';" height="16" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" /><span id="Code_Closed_Text_210520" style="border-right: #808080 1px solid; border-top: #808080 1px solid; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">Code</span><span id="Code_Open_Text_210520" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #0000ff">namespace</span><span style="color: #000000">&nbsp;LINQDemo<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Student<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Name&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;Address&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;Score&nbsp;{&nbsp;</span><span style="color: #0000ff">get</span><span style="color: #000000">;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000">}<br />
</span><span style="color: #008080">10</span>&nbsp;</span></div>
接下来把这个实体添加到集合中，并查询：<br />
<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"><span style="color: #008080">&nbsp;1</span>&nbsp;<span style="color: #000000">ArrayList&nbsp;arr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList();<br />
</span><span style="color: #008080">&nbsp;2</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr.Add(<br />
</span><span style="color: #008080">&nbsp;3</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Student<br />
</span><span style="color: #008080">&nbsp;4</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">&nbsp;5</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">caodaiming</span><span style="color: #800000">"</span><span style="color: #000000">,<br />
</span><span style="color: #008080">&nbsp;6</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">sichuan</span><span style="color: #800000">"</span><span style="color: #000000">,<br />
</span><span style="color: #008080">&nbsp;7</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Score&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">49</span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
</span><span style="color: #008080">&nbsp;9</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr.Add(<br />
</span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Student<br />
</span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
</span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">lishi</span><span style="color: #800000">"</span><span style="color: #000000">,<br />
</span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Address&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">xi'an</span><span style="color: #800000">"</span><span style="color: #000000">,<br />
</span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Score&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800080">44</span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;querry&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;from&nbsp;Student&nbsp;student&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;arr&nbsp;select&nbsp;student;<br />
</span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(Student&nbsp;st&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;querry)<br />
</span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000"><br />
</span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(st.Name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">-----</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;st.Address&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">-------</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;st.Score);</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在这里我们还是按照了查询的基本步骤来做的，没有什么变化，只要记住这个步骤就OK了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在说说查询的表达试吧，其实这与我们数据库的语句有一点像，数据库的语句是select .....from .....,而Linq查询语句是from ..... in ..... where ......select 完全一我们SQL语句是相反的，Linq查询语句是面对象的查询语句，就是JAVA中Hibernate 中的HQL一样，都是一种面像对象的语句，如果有兴趣的朋友可以去对比一下这两者的不能之处；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好了就写到这里吧，以上的文章由自己的理解写出，但还是有很多的不足的地方，希望大家对我提出你们的看法，这是也是我边学边写的，在这里我借用了MSDN的文章来完成这遍文章的写作；<br />
<img src ="http://www.blogjava.net/jvict/aggbug/226937.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jvict/" target="_blank">Documents</a> 2008-09-04 14:29 <a href="http://www.blogjava.net/jvict/articles/226937.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>