C#笔记:LinqToObject用法 Linq作为 .net3.5 可以比肩蓝翔挖掘机的重磅产品,当然可以对万事万物进行查询。而不只是查查xml,数据库可以概括的。自然,我们也能用它对List<T> ,甚至简单的数组进行查找。简单说来,只要是实现了IEnumerable<T>接口的数据结构,我们都能对其使用linq进行查找,而lambda表达式,则是代码简洁易编写的保证。举例说明。有类:People。包含两个字段,ID和姓名。ID为一位大写字母加三位数字组成,比如A010。A>B,9>1。即公司最高职位是A999,最低职位是Z001。 public class People { public People(string ID, string strName) { this.ID = ID; this.strName = strName; } public string ID; public string strName; }创建一个List,并添加一些测试数据List<People> listPeople = new List<People>() { new People("Z110", "yzh"), new People("A050", "zhh"), new People("B135", "dhh"), new People("C321", "dbb"), new People("A111", "dnn"), new People("Z111", "myOK")};例1:查找ID包含A的员工。 var selectItems = listPeople.Where(o => o.ID.Contains('A')); //打印返回的list。 selectItems.ToList<People>().ForEach(o => Console.WriteLine(o.ID + " " + o.strName)); .where方法返回的是一个枚举,我们可以使用ToList方法把它转换成相应的数组。例2:对上面的结果进行公司职位高低排序。var selectSortItems = selectItems.OrderBy(o => o.ID, mc); //如果是简单的升降排序,我们只需要传入选择器,用默认的系统排序器即可。这里有些复杂,网上的材料不多。OrderBy函数,传入的是两个参数,一个选择器,一个排序器。选择器我们自然可以使用lambda表达式选择People类中的字段ID。但是,排序器MC我们该如何实现呢? 排序器是一个类的实例,它实现接口IComparer<T>class MyComparer : IComparer<string> { /// <summary> /// 比较函数具体实现,对x和y的绝对值进行比较。 /// </summary> public int Compare(string x, string y) { if (!x.Substring(0, 1).Equals(y.Substring(0, 1)))//首先对首字母进行比较。 { return x.CompareTo(y); } else { return x.CompareTo(y) * (-1);//若首字母相同,比较数字部分。降序,所以乘以-1 } } }自然 MyComparer mc = new MyComparer();利用linq中的orderby,我们可以对任意数据以任意方法进行排序和查找。感觉是很不错的。而且大部分情况下我们不需要自己实现排序器。只用简单的一个lambda式就能完成排序,真呀么真开心。例子3,对数据进行分页。这个例子我们必须动用linq中的Skip函数和Take函数。Skip(N)函数会跳过前面N个对象,而Take(N)则会从当前位置选取N个连续的对象。并返回新的枚举。下面的代码就是将测试数据分成3页。 int pageSize = 3; int pageCount = listPeople.Count % pageSize == 0 ? listPeople.Count / pageSize : listPeople.Count / pageSize + 1; for (int i = 1; i <= pageCount; i++) { var sortList = listPeople.OrderBy(o => o.ID).Skip(pageSize * (i - 1)).Take(3); foreach (People p in sortList) { Console.WriteLine(p.strName); } Console.WriteLine("==========================="); }例4:查找其他类型下面这个例子,返回数组中长度大于4的单词的枚举。数组也是一样的可以查的。嘿嘿。 string[] testArray = { "hello", "world", "my", "baby" }; var selectItems = from item in testArray where item.Length > 4 select item;等价于:var selectItems = testArray.Where(o => o.Length > 4);终于弄完了。哈哈。linq真是个好东西啊。 来自 大脸猫 写于 2015-02-16 21:46 -- 更新于2020-10-19 13:06 -- 0 条评论