select的源码public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector);

class Program
{
static void Main(string[] args)
{
    var customers = new[] {  
        new { CustomerID = 1, FirstName = "Orlando", LastName = "Gee",  
                CompanyName = "A Bike Store" },
        new { CustomerID = 2, FirstName = "Keith", LastName = "Harris",  
                CompanyName = "Bike World" },
        new { CustomerID = 3, FirstName = "Donna", LastName = "Carreras",  
                CompanyName = "A Bike Store" },
        new { CustomerID = 4, FirstName = "Janet", LastName = "Gates",  
                    CompanyName = "Fitness Hotel" },
        new { CustomerID = 5, FirstName = "Lucy", LastName = "Harrington",  
                CompanyName = "Grand Industries" },
        new { CustomerID = 6, FirstName = "David", LastName = "Liu",  
                CompanyName = "Bike World" },
        new { CustomerID = 7, FirstName = "Donald", LastName = "Blanton",  
                CompanyName = "Grand Industries" },
        new { CustomerID = 8, FirstName = "Jackie", LastName = "Blackwell",  
                CompanyName = "Fitness Hotel" },
        new { CustomerID = 9, FirstName = "Elsa", LastName = "Leavitt",  
                CompanyName = "Grand Industries" },
        new { CustomerID = 10, FirstName = "Eric", LastName = "Lang",  
                    CompanyName = "Distant Inn" }  
    };
    var addresses = new[] {  
        new { CompanyName = "A Bike Store", City = "New York", Country = "United States"},
        new { CompanyName = "Bike World", City = "Chicago", Country = "United States"},
        new { CompanyName = "Fitness Hotel", City = "Ottawa", Country = "Canada"},
        new { CompanyName = "Grand Industries", City = "London",Country = "United Kingdom"},
        new { CompanyName = "Distant Inn", City = "Tetbury", Country = "United Kingdom"}
    };

//查询数据
    IEnumerable<string> customerFirstNames = customers.Select(cust => cust.FirstName);
    //IEnumerable<string> customerFirstNames = from custs in customers select custs.FirstName;
    foreach (string name in customerFirstNames)
    {
        Console.WriteLine(name);
    }
    Console.WriteLine("\r\n");

IEnumerable<string> customerFullNames = customers.Select(cust => cust.FirstName + "  " + cust.LastName);
    //IEnumerable<string> customerFullNames = from custs in customers select custs.FirstName + "  " + custs.LastName;
    foreach (string name in customerFullNames)
    {
        Console.WriteLine(name);
    }

Console.WriteLine("\r\n");
    var customerNames = customers.Select(cust => new { FirstName = cust.FirstName, LastName = cust.LastName });
    //var customerNames = from custs in customers select new { FirstName = custs.FirstName, LastName = custs.LastName };
    foreach (var name in customerNames)
    {
        Console.WriteLine(name);
    }

//数据筛选
    Console.WriteLine("\r\n");
    IEnumerable<string> usCompanies = addresses.Where(addr => String.Equals(addr.Country, "United States"))
                                                .Select(usComp => usComp.CompanyName);
    //IEnumerable<string> usCompanies = from adr in addresses
    //                                  where String.Equals(adr.Country, "United States")
    //                                  select adr.CompanyName;
    foreach (string name in usCompanies)
    {
        Console.WriteLine(name);
    }

//数据排序
    Console.WriteLine("\r\n");
    IEnumerable<string> companyNames = addresses.OrderBy(addr => addr.CompanyName).Select(comp => comp.CompanyName);
    //IEnumerable<string> companyNames = from adr in addresses orderby adr.CompanyName select adr.CompanyName;
    foreach (string name in companyNames)
    {
        Console.WriteLine(name);
    }

Console.WriteLine("\r\n");
    //数据分组---分组之后变成二维数组
    var companiesGroupedByCountry = addresses.GroupBy(addrs => addrs.Country);
    //var companiesGroupedByCountry = from adr in addresses group adr by adr.Country;
    foreach (var companiesPerCountry in companiesGroupedByCountry)
    {
        Console.WriteLine("Country: {0}\t{1} companies",
                companiesPerCountry.Key, companiesPerCountry.Count());
        foreach (var companies in companiesPerCountry)
        {
            Console.WriteLine("\t{0}", companies.CompanyName);
        }
    }

//数据统计
    Console.WriteLine("\r\n");
    int numberOfCountries = addresses.Select(addr => addr.Country).Distinct().Count();
    //int numberOfCountries = (from adr in addresses select adr.Country).Distinct().Count();
    Console.WriteLine("Number of countries: {0}", numberOfCountries);

//联合查询--内联查询
    Console.WriteLine("\r\n");
    var citiesAndCustomers = customers.Select(c =>
        new { c.FirstName, c.LastName, c.CompanyName })
        .Join(addresses, custs => custs.CompanyName, addrs => addrs.CompanyName, (custs, addrs) => new { custs.FirstName, custs.LastName, addrs.Country });

//var citiesAndCustomers = from cuts in customers
    //                         join adr in addresses
    //                             on cuts.CompanyName equals adr.CompanyName
    //                         select new { cuts.FirstName, cuts.LastName, adr.Country };
    foreach (var row in citiesAndCustomers)
    {
        Console.WriteLine(row);
    }

Console.ReadKey();
    }
}
}

private static void Orderby()
        {
            int[] intAry1 = { 4, 3, 556, 34, 6, 2, 67 };
            var query1 = from var1 in intAry1
                         orderby var1 ascending
                         select var1;
            query1.ToList().ForEach(p => Console.Write(p + Environment.NewLine));
            var query2 = from var1 in intAry1
                         orderby var1 descending
                         select var1;
            query2.ToList().ForEach(p => Console.Write(p + Environment.NewLine));
            Console.WriteLine();
        }

private static void Join左外部连接()
        {
            int[] intAry1 = { 5, 15, 25, 30, 33, 40 };
            int[] intAry2 = { 5, 20, 30, 30, 50, 70, 80 };
            var query1 = from var1 in intAry1
                         join var2 in intAry2 on var1 equals var2 into var2Grp //左连接 右连接相反
                         from grp in var2Grp.DefaultIfEmpty()
                         select new { a = var1 != 0 ? var1 : 100, b = grp };
            query1.ToList().ForEach(p => Console.Write("{0}:{1}", p.a, p.b + Environment.NewLine));
            Console.WriteLine();
        }

private static void Join分组连接()
        {
            int[] intAry1 = { 5, 15, 25, 30, 33, 40 };
            int[] intAry2 = { 5, 20, 30, 30, 50, 70, 80 };
            var query1 = from var1 in intAry1
                         join var2 in intAry2 on var1 equals var2 into var2Grp
                         select new { a = var1, b = var2Grp };
            foreach (var item in query1)
            {
                Console.Write("{0}:", item.a);
                foreach (var o in item.b)
                {
                    Console.Write("{0} ", o);
                }
                Console.WriteLine();
            }
            Console.WriteLine();
        }

private static void Join内部连接()
        {
            int[] intAry1 = { 5, 15, 25, 30, 33, 40 };
            int[] intAry2 = { 5, 20, 30, 30, 50, 70, 80 };
            var query1 = from var1 in intAry1
                         join var2 in intAry2 on var1 equals var2
                         select new { a = var1, b = var2 };
            query1.ToList().ForEach(p => Console.Write(p.a + Environment.NewLine));
            Console.WriteLine();
        }

Linq知识大全的更多相关文章

  1. PHP知识大全

    --------------------------------------------------------- PHP知识大全 ---------------------------------- ...

  2. python知识大全目录,想学的看过来!

    Python总结篇——知识大全   python装饰器   PyCharm安装与配置,python的Hello World   sort与sorted的区别及实例   我必须得告诉大家的MySQL优化 ...

  3. VC6.0调试知识大全

    VC6.0调试知识大全 分类: C++ 2010-09-06 21:33 7080人阅读 评论(5) 收藏 举报 debuggingmfcfunctionmenumicrosoftdll My Not ...

  4. .Net知识大全(个人整理)

    .Net知识大全 本章内容适用于对.NET有一定基础的或者是想通过本文章对.NET基础知识记不清楚的朋友,可以通过本文章进行回顾. 面试的时候可能也会遇到相应的题目,建议面试前进行回顾!!! 1.NE ...

  5. Linq 知识总结

    一.说明: LINQ,语言集成查询(Language INtegrated Query)是一组用于c#和Visual Basic语言的扩展.它允许编写C#或者Visual Basic代码以查询数据库相 ...

  6. Linq 知识回顾

    开篇语 在说LINQ之前必须先说说几个重要的C#语言特性 与LINQ有关的语言特性 隐式类型 (1)源起 在隐式类型出现之前, 我们在声明一个变量的时候, 总是要为一个变量指定他的类型 甚至在fore ...

  7. linq语法大全(转集)

     Join操作符 适用场景:在我们表关系中有一对一关系,一对多关系,多对多关系等.对各个表之间的关系,就用这些实现对多个表的操作. 说明:在Join操作中,分别为Join(Join查询), Selec ...

  8. C#接口知识大全收藏

    第一节 接口慨述 接口(interface)用来定义一种程序的协定.实现接口的类或者结构要与接口的定义严格一致.有了这个协定,就可以抛开编程语言的限制(理论上).接口可以从多个基接口继承,而类或结构可 ...

  9. 扫盲Linq知识

    LINQ,语言集成查询(Language Integrated Query),是在.NET Framework 3.5 中出现的技术. 借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形 ...

随机推荐

  1. linuxmint获取root

    1.进入系统à点击桌面左下角的菜单à点击系统设置 2. 在系统设置里面找到登陆窗口并进去 3.打入自己设置的开机登陆密码 4. 选择选项,并把运行root登陆的勾打上 5.重启生效

  2. Robot Framework自动化测试(三)--- 封装系统关键字

    之前对robotframework-ride了解的不多,后来知道了引入Selenium2Lirary库后可以做web UI自动化测试,但发现和python没啥关系,今天学习了封装系统关键字算是和pyt ...

  3. [转帖] 安装Eclipse插件长时间卡在 calculating requirements and dependencies

    把"Contact all update sites during install to find required software"前面的勾去掉,然后点击下一步,这样之后问题迎 ...

  4. hdu 4635 Strongly connected(Tarjan)

    做完后,看了解题报告,思路是一样的.我就直接粘过来吧 最终添加完边的图,肯定可以分成两个部X和Y,其中只有X到Y的边没有Y到X的边,那么要使得边数尽可能的多,则X部肯定是一个完全图,Y部也是,同时X部 ...

  5. IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'

    转载自:http://i.cnblogs.com/EditPosts.aspx?postid=4012011 今天想写一个请求的天气,好的,废话不多说,先贴代码: 使用AFNetWorking 发送g ...

  6. 自定义HttpHandler配置iis8.0

    配置环境,window8 ,iis8.0,.net Framework4.0,托管管道模式“经典” 步骤 (1)进入iis管理器,选中要设置的网站-->功能视图-->MIME类型--> ...

  7. android113 自定义进度条

    MainActivity: package com.itheima.monitor; import android.os.Bundle; import android.app.Activity; im ...

  8. android94 样式和主题

    style.xml <resources xmlns:android="http://schemas.android.com/apk/res/android"> < ...

  9. iostat来对linux硬盘IO性能进行了解

    http://www.php-oa.com/2009/02/03/iostat.html

  10. 开启URL伪静态的方法

    ## 开启URL伪静态的方法.txt# 1. 请确认您服务器的类型. ThinkSNS的伪静态规则支持Apache.IIS.Nginx. 2. 请确认您的服务器支持URL Rewrite(可从服务器提 ...