筛选操作where能够处理逻辑运算符组成的逻辑表达式。比如逻辑“与”,逻辑“或”,并从数据源中筛选数据,它和where子句的功能非常相似。Enumerable类的Where()原型如下:
1 public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
其中source表示要筛选的数据源,predicate表示筛选函数,该函数用来指定元素满足的条件。
下面的实例代码WhereFilterQuery()函数演示了where操作筛选的方法。
具体的演示数据我们还是用前面讲解的UserBaseInfo类。
1 public class UserBaseInfo 2 { 3 private List<string> aliasname; 4 private int id; 5 private string email; 6 private int roleid; 7 private string username; 8 9 public UserBaseInfo(int Id, string userName, string email, List<string> aliasName) 10 : this(Id, userName, email) 11 { 12 13 this.aliasname = aliasName; 14 } 15 16 public UserBaseInfo(int Id, string userName, string email) 17 { 18 this.id = Id; 19 this.username = userName; 20 this.email = email; 21 } 22 23 public UserBaseInfo(int Id, string userName, string email, int roleId) 24 : this(Id, userName, email) 25 { 26 this.roleid = roleId; 27 } 28 29 public UserBaseInfo(int Id, string userName, string email, int roleId, List<string> aliasName) 30 : this(Id, userName, email, roleId) 31 { 32 this.aliasname = aliasName; 33 } 34 35 public List<string> AliasName 36 { 37 get { return this.aliasname; } 38 set { this.aliasname = AliasName; } 39 } 40 41 public int ID 42 { 43 get { return this.id; } 44 set 45 { 46 this.id = ID; 47 } 48 } 49 50 public string Email 51 { 52 get { return this.email; } 53 set { this.email = Email; } 54 } 55 56 public int RoleId 57 { 58 get { return this.roleid; } 59 set { this.roleid = RoleId; } 60 } 61 62 public string UserName 63 { 64 get { return this.username; } 65 set { this.username = UserName; } 66 } 67 }
首先我们创建一个数据类型为List<UserBaseInfo>类型的对象users,包含9个元素。然后我们用Linq查询出ID的值小于3的元素。在这里我们用2中查询方式,一种就是前面讲过的查询表达式,一种就是现在讲的查询操作。
1 private void WhereFilterQuery() 2 { 3 4 List<UserBaseInfo> users = new List<UserBaseInfo>(); 5 6 7 for (int i = 1; i < 10; i++) 8 { 9 users.Add(new UserBaseInfo(i, "users0" + i.ToString(), "user0" + i.ToString() + "@web.com", i * 2)); 10 11 } 12 13 //查询表达式 14 var result1 = from u in users 15 where u.ID < 3 16 select u; 17 //查询操作 18 var result2 = users.Where(u=>u.ID<3); 19 20 Response.Write("------查询表达式-----------</br>"); 21 foreach (var u in result1) 22 { 23 24 Response.Write("用户ID"+u.ID+"_" +"用户名"+u.UserName+ "</br>"); 25 26 } 27 28 Response.Write("------查询操作-----------</br>"); 29 foreach (var u in result2) 30 { 31 32 Response.Write("用户ID" + u.ID + "_" + "用户名" + u.UserName + "</br>"); 33 34 } 35 }
我们用两种方式,我们来看看最终结果:
可以看到查询的结果是一样的。