前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#笔记:LinqToObject用法

C#笔记:LinqToObject用法

作者头像
超级大猪
发布2019-11-22 09:46:17
6210
发布2019-11-22 09:46:17
举报
文章被收录于专栏:大猪的笔记大猪的笔记

Linq作为 .net3.5 可以比肩蓝翔挖掘机的重磅产品,当然可以对万事万物进行查询。而不只是查查xml,数据库可以概括的。自然,我们也能用它对List<T> ,甚至简单的数组进行查找。 简单说来,只要是实现了IEnumerable<T>接口的数据结构,我们都能对其使用linq进行查找,而lambda表达式,则是代码简洁易编写的保证。 举例说明。 有类:People。包含两个字段,ID和姓名。ID为一位大写字母加三位数字组成,比如A010。A>B,9>1。即公司最高职位是A999,最低职位是Z001。

代码语言:javascript
复制
 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的员工。

代码语言:javascript
复制
 var selectItems = listPeople.Where(o => o.ID.Contains('A'));
 //打印返回的list。          
 selectItems.ToList<People>().ForEach(o => Console.WriteLine(o.ID + " " + o.strName));

.where方法返回的是一个枚举,我们可以使用ToList方法把它转换成相应的数组。 例2:对上面的结果进行公司职位高低排序。

代码语言:javascript
复制
var selectSortItems = selectItems.OrderBy(o => o.ID, mc); //如果是简单的升降排序,我们只需要传入选择器,用默认的系统排序器即可。

这里有些复杂,网上的材料不多。OrderBy函数,传入的是两个参数,一个选择器,一个排序器。选择器我们自然可以使用lambda表达式选择People类中的字段ID。但是,排序器MC我们该如何实现呢?  排序器是一个类的实例,它实现接口IComparer<T>

代码语言:javascript
复制
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页。

代码语言:javascript
复制
  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的单词的枚举。数组也是一样的可以查的。嘿嘿。

代码语言:javascript
复制
  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 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档