[LINQ] LINQ to Object 實例01 (LIST<T>)

摘要:[LINQ] LINQ to Object 實例 (LIST)

文章轉自:http://book.51cto.com/art/200911/161447.htm

11.3 演练:使用LINQ to Object实现学生成绩信息查询(1)

http://book.51cto.com  2009-11-06 09:21  余金山/林慧  电子工业出版社  我要评论(0)

 

 

11.3  演练:使用LINQ to Object实现学生成绩信息查询(1)

视频精讲:光盘\video\baseVideo\11\使用LINQ to Object.swf

LINQ查询支持的第一种形式就是"LINQ to Object"。术语"LINQ to Objects"是指直接对任意 IEnumerable 或 IEnumerable(T) 集合使用LINQ查询,无须使用中间LINQ提供程序或API,如LINQ to SQL或 LINQ to XML。可以使用LINQ查询任何可枚举的集合,如List(T)、Array或Dictionary(TKey, TValue)。该集合可以是用户定义的集合,也可以是.NET Framework API返回的集合。

从根本上说,LINQ to Objects表示一种新的处理集合的方法。如果采用旧方法,必须编写指定如何从集合中检索数据的复杂的foreach循环。而采用 LINQ 方法,只需编写描述要检索的内容的声明性代码。

另外,与传统的foreach循环相比,LINQ查询具有以下三大优势:

它们更简明、更易读,尤其在筛选多个条件时。

它们使用最少的应用程序代码提供强大的筛选、排序和分组功能。

无须修改或只需做很小的修改即可将它们移植到其他数据源。

通常,对数据执行的操作越复杂,体会到的使用 LINQ 代替传统迭代技术的好处就越多。下面我们通过一个示例来分析如何使用LINQ to Object。

基于LINQ to Object,实现对学生成绩信息的查询显示。

我们可以按照如下步骤来加以实现。

创建ASP.NET Web应用。

添加数据源。

创建LINQ to Object查询。

编译并执行。

具体步骤如下。

打开Visual Studio 2008,创建一个ASP.NET Web 应用项目,命名为"LinqtoObjectApp"。

打开项目的默认窗体"Default.aspx",切换到设计视图,添加一个GridView控件,用于显示查询结果信息,如图11-9所示。

在解决方案资源管理器中用鼠标右键单击所创建的项目,在弹出的快捷菜单中选择【添加类】命令,在打开的对话框中添加一个类"Student.cs",如图11-10所示。

 
(点击查看大图)图11-9  添加控件
 
(点击查看大图)图11-10  添加类

编码学生类,如下所示:

【程序11-5】光盘\code\11\LinqtoObjectApp \Student.cs
 


  1. 01  using System;  
  2. 02  using System.Collections.Generic;  
  3. 03  using System.Linq;  
  4. 04  using System.Web;  
  5. 05  namespace LinqtoObjectApp  
  6. 06  {  
  7. 07      public class Student  
  8. 08      {  
  9. 09          public string Name { get; set; }  
  10. 10          public int ID { get; set; }  
  11. 11          public List<int> Scores;  
  12. 12      }  
  13. 13  } 

编码default.aspx.cs,执行查询:

【程序11-6】光盘\code\11\LinqtoObjectApp \default.aspx.cs

  1. 01  using System;  
  2. 02  using System.Collections.Generic;  
  3. 03  using System.Linq;  
  4. 04  using System.Web;  
  5. 05  using System.Web.UI;  
  6. 06  using System.Web.UI.WebControls;  
  7. 07    
  8. 08  namespace LinqtoObjectApp  
  9. 09  {  
  10. 10      public partial class _Default : System.Web.UI.Page  
  11. 11      {  
  12. 12          protected void Page_Load(object sender, EventArgs e)  
  13. 13          {  
  14. 14              List<Student> students = new List<Student> 
  15. 15              {  
  16. 16                 new Student {Name="张涛"ID=111
    Scoresnew List<int> {97, 92, 81, 60}},  
  17. 17                 new Student {Name="周明海"ID=112
    Scoresnew List<int> {75, 84, 91, 39}},  
  18. 18                 new Student {Name="吴军"ID=113
    Scoresnew List<int> {88, 94, 65, 91}},  
  19. 19                 new Student {Name="李行",ID=112
    Scoresnew List<int> {97, 89, 85, 82}},  
  20. 20                 new Student {Name="姚克峰"ID=115
    Scoresnew List<int> {35, 72, 91, 70}},  
  21. 21                 new Student {Name="张见明",  ID=116
    Scoresnew List<int> {99, 86, 90, 94}},  
  22. 22                 new Student {Name="刘涛",ID=117
    Scoresnew List<int> {93, 92, 80, 87}},  
  23. 23                 new Student {Name="马明袁"ID=118,
    Scoresnew List<int> {92, 90, 83, 78}},  
  24. 24                 new Student {Name="袁佳"ID=119,
    Scoresnew List<int> {68, 79, 88, 92}},  
  25. 25                 new Student {Name="余中鑫"ID=120
    Scoresnew List<int> {99, 82, 81, 79}},  
  26. 26                 new Student {Name="欧阳正红",  ID=121
    Scoresnew List<int> {96, 85, 91, 60}},  
  27. 27                 new Student {Name="杨证",  ID=122
    Scoresnew List<int> {94, 92, 91, 91} }  
  28. 28              };  
  29. 29              var studentQuery =  
  30. 30                  from student in students  
  31. 31                  where student.Scores[0] > 90  
  32. 32                  select student;  
  33. 33              GridView1.DataSource = studentQuery;  
  34. 34              GridView1.DataBind();  
  35. 35          }  
  36. 36      }  
  37. 37  }