LinQ—基本查询操作符 Select/Where/Group语句

LinQ中的基本查询操作和SQL中的功能是一样的,对于其异同点,我们来了解了解:

1)Select

语法:

<span style="font-family:SimHei;font-size:18px;"> public static IEnumerable<TResult> Select<TSource,TResult>(
this IEnumerable<TSource>source,Func<TSource,TResult>selector)</span>
说明:
  • Select方法本身是一个泛型集合扩展方法
  • 它作用于IEnumerable<TSource>类型
  • 它只接受一个Func<TSource,TResult>类型参数
  • Func<TSource,TResult>是一个泛型委托,位于System名字空间下,System Core dll中,在这里selector是一个提取器。

2)Where

语法:

<span style="font-family:SimHei;font-size:18px;">public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource>source,Func<TSource,bool>predicate)</span>

说明:
  • Where方法也是一个泛型扩展方法
  • 它和Select()一样作用于IEnumerable<TSource>类型
  • 它只接受一个Func<TSource,bool>泛型委托参数
  • 在这里predicate是一个判断条件
3)Group                                                                                               语法:
public static IEnumerable<IGrouping<TKey.TSource>>GroupBy<TSource.TKey>
(this IEnumerable<TSource>source,Func<TSource,TKey>keySelector)<span style="font-family: SimHei; background-color: rgb(255, 255, 255);">                                                                    </span>

4)举例:

首先我们来写一个扩展类,为IEnumerablet<string>提供输出的方法

<span style="font-family:SimHei;font-size:18px;"> //扩展类,只要是静态就可以
    public static class ExtraClass
    {
        //为IEnumerablet<string>提供输出的方法
        public static void Print(this IEnumerable<string> ie)
        {
            //获取可遍历的接口
            IEnumerator<string> result = ie.GetEnumerator();
            Console.WriteLine("\n-------------------------------------\n");

            while (result.MoveNext())
            {
                Console.WriteLine(result.Current);
            }
            Console.WriteLine("\n---------------------------------------\n");
        }
    }</span>
写一个泛型集合,为其存放几条数据:
<span style="font-family:SimHei;font-size:18px;">  private void BtnSelect_Click(object sender, EventArgs e)
        {
            //LinQ to Objects
            //泛型集合数据persons
            List<string> persons = new List<string>();
            persons.Add("li si");
            persons.Add("meng meng");
            persons.Add("huo huo");
            persons.Add("niu nan");
            persons.Add("hu hu");
            persons.Add("tu zi");
            persons.Add("huo er");
            persons.Add("huo xu");</span>
这样我们就可以根据选择来显示输出结果:

1、输出person中所有元素:

<span style="font-family:SimHei;font-size:18px;"> //输出person中所有的元素
 var result=persons.Select(p => p);</span>

显示结果:


2、输出person中姓huo的(以下三种语句都显示同样的效果)

<span style="font-family:SimHei;font-size:18px;"> //输出person中姓huo的(以下三种语句都必答同样的效果)
    //var result=persons.Where(p=>p.StartsWith("huo"));
   //var result = persons.Select(p=>p).Where(p => p.StartsWith("huo"));
  //var result = persons.Where(p => p.StartsWith("huo")).Select(p=>p);</span>
显示的效果:

当然,也可以直接使用Where,利用bool委托参数来执行,

<span style="font-family:SimHei;font-size:18px;">  var result=persons.Where(p=>Judge(p));
            
       result.Print();
        }
        public bool Judge(string s)
        {
            if (s.StartsWith("huo"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }</span>

显示效果一样,但是却直接显示了Where()语句的用法

对于Group的使用,我们可以使用其实现按照姓氏来显示名字如下:

 //按照姓名来分组-取出姓名中的空格前的部分
            var result=persons.GroupBy(p=>p.Split(new char[]{' '})[0]);

            foreach (var group in result)      //循环姓氏显示出来
            {
                Console.WriteLine("姓:" + group.Key);
                foreach (var name in group)  //根据姓氏显示所对应的名字
                {
                    Console.WriteLine("\t" + name);    //格式调整
                }
                Console.WriteLine();
            }

显示效果:


举得例子也只是一些常用的查询语句,其他的在继续学习中!


评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值