使用LINQ技术能显著简化查询集合的过程,不过要求集合对象必须实现IEnumerable<T>泛型接口或者是IEnumerable接口。这方面请参考:http://www.cnblogs.com/cm490893449/archive/2010/06/23/1763435.html
1、新建一个网站项目,添加一个页面:LINQtoObject.aspx;
2、在页面中添加两个lable控件和两个button控件。
前台代码:
<form id="form1" runat="server">
<div>
<div>
<asp:Label ID="Lbltext1" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="btn1" runat="server" Text="使用传统方法" οnclick="btn1_Click" /><br />
</div>
<div>
<asp:Label ID="Lbltext2" runat="server" Text="Label"></asp:Label>
<br />
<asp:Button ID="btn2" runat="server" Text="使用LINQ方法" οnclick="btn2_Click" /><br />
</div>
</div>
</form>
3、转到后台代码编写:
(1)首先,构造一个数组;
(2)分别编写两个button控件的方法;
代码如下:
private string[] staff = { "Jason", "Katty", "Tom", "Dick", "Harry" };
protected void btn1_Click(object sender, EventArgs e)
{
Lbltext1.Text = "";
foreach (var somebody in staff)
{
if (somebody.Length > 4)
{
Lbltext1.Text += somebody + "<br/>";
}
}
}
protected void btn2_Click(object sender, EventArgs e)
{
Lbltext2.Text = "";
//使用LINQ语法
//IEnumerable<string> result = from str in staff
// where str.Length > 4
// select str;
//使用where拓展方法
IEnumerable<string> result = staff.Where(t => t.Length > 4);
foreach (string str in result)
{
Lbltext2.Text += str + "<br/>";
}
}
运行结果如下:
注意,上面的LINQ实现我编写了两个方法,一个是LINQ语法,一个是拓展方法,两个方法的实现效果是一样的。
另外,在后台文件中要包含命名空间:System.Collections.Generic,否则会出现“非泛型 类型“System.Collections.IEnumerable”不能与类型参数一起使用”的错误。
总结:
LINQ查询完成了以下工作:
(1)创建LINQ表达式;
(2)获取一个实现了IEnumerable<T>的迭代对象;
(3)当遍历迭代对象时,LINQ开始实际的数据检索。(此处知识有关LINQ的延迟执行特性)