篩選操作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 }
我們用兩種方式,我們來看看最終結果:
可以看到查詢的結果是一樣的。