LINQ的基本应用语法

37 篇文章 0 订阅

来源:C#入门经典第四版


 static void Main(string[] args)
        {
            List<Customer> customers = new List<Customer> {
                new Customer { ID="A", City="New York", Country="USA",Region="North America", Sales=9999},
                new Customer { ID="B", City="Mumbai", Country="India",Region="Asia", Sales=8888 },
                new Customer { ID="C", City="Karachi", Country="Pakistan",Region="Asia", Sales=7777 },
                new Customer { ID="D", City="Delhi", Country="India",Region="Asia", Sales=6666 },
                new Customer { ID="E", City="S o Paulo", Country="Brazil",Region="South America", Sales=5555 },
                new Customer { ID="F", City="Moscow", Country="Russia",Region="Europe", Sales=4444 },
                new Customer { ID="G", City="Seoul", Country="Korea", Region="Asia",Sales=3333 },
                new Customer { ID="H", City="Istanbul", Country="Turkey",Region="Asia", Sales=2222 },
                new Customer { ID="I", City="Shanghai", Country="China", Region="Asia",Sales=1111 },
                new Customer { ID="J", City="Lagos", Country="Nigeria",Region="Africa", Sales=1000 },
                new Customer { ID="K", City="Mexico City", Country="Mexico",Region="North America", Sales=2000 },
                new Customer { ID="L", City="Jakarta", Country="Indonesia",Region="Asia", Sales=3000 },
                new Customer { ID="M", City="Tokyo", Country="Japan",Region="Asia", Sales=4000 },
                new Customer { ID="N", City="Los Angeles", Country="USA",Region="North America", Sales=5000 },
                new Customer { ID="O", City="Cairo", Country="Egypt",Region="Africa", Sales=6000 },
                new Customer { ID="P", City="Tehran", Country="Iran",Region="Asia", Sales=7000 },
                new Customer { ID="Q", City="London", Country="UK",Region="Europe", Sales=8000 },
                new Customer { ID="R", City="Beijing", Country="China",Region="Asia", Sales=9000 },
                new Customer { ID="S", City="Bogot á ", Country="Colombia",Region="South America", Sales=1001 },
                new Customer { ID="T", City="Lima", Country="Peru",Region="South America", Sales=2002 }
                };

            var queryResult = from c in customers where c.Region == "Asia" select c;
            foreach (Customer customer in queryResult)
            {
                Console.WriteLine(customer);
            }

            var queryResult2 = from c in customers where c.Region == "Asia" select new { c.City, c.Country, c.Region };
            foreach (var item in queryResult2)
            {
                Console.WriteLine(item);
            }

            Console.WriteLine();
            var queryResult3 = (from c in customers select c.Region).Distinct();
            Console.WriteLine("Different Regions:");
            foreach (var item in queryResult3)
            {
                Console.WriteLine(item);
            }

            //Any和All的用法
            Console.WriteLine();
            bool anyUSA = customers.Any(c => c.Country == "USA");
            if (anyUSA)
                Console.WriteLine("Some customers are in the USA");
            else
                Console.WriteLine("No customers are in the USA");

            bool allAsia = customers.All(c => c.Region == "Asia");
            if (allAsia)
                Console.WriteLine("All customers are in Asia");
            else
                Console.WriteLine("Not all customers are in Asia");
            
            //组合查询
            Console.WriteLine();
            Console.WriteLine("Group by:");
            var queryResult4 = from c in customers group c by c.Region into cg select new { TotalSales = cg.Sum(c => c.Sales), Region = cg.Key };
            var orderResult = from cg in queryResult4 orderby cg.TotalSales descending select cg;
            Console.WriteLine("Total\t: By\nSales\t:Region\n-----\t------");
            foreach (var item in orderResult)
            {
                Console.WriteLine(item.TotalSales + "\t: " + item.Region);
            }

            //Take()和Skip()是两个相反的方法,需要结合orderby字句一起使用
            //Take():获取前n个结果
            //Skip():跳过前n个结果,返回剩余的结果。
            var queryResult5 = from c in customers orderby c.Sales descending select new { c.ID, c.City, c.Country, c.Sales };
            Console.WriteLine("Top Five Customers by Sales");
            foreach (var item in queryResult5.Take(5))
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("Customers Not in Top Five");
            foreach (var item in queryResult5.Skip(5))
            {
                Console.WriteLine(item);
            }

            //First()方法返回结果集中第一个匹配给定条件的元素
            //FirstOrDefault()跟First()方法不同的一点是:无需添加错误处理代码,如果没有匹配的数据,也不会报错
            var queryResult6 = from c in customers select new { c.City, c.Country, c.Region };
            Console.WriteLine("A customer in Africa");
            Console.WriteLine(queryResult6.First(c => c.Region == "Africa"));
            Console.WriteLine("A customer in Antarctica");
            Console.WriteLine(queryResult6.FirstOrDefault(c => c.Region == "Antarctica"));
            
            //集运算符的使用
            //初始化一个Order列表
            List<Order> orders = new List<Order>{
                new Order { ID="P", Amount=100 },
                new Order { ID="Q", Amount=200 },
                new Order { ID="R", Amount=300 },
                new Order { ID="S", Amount=400 },
                new Order { ID="T", Amount=500 },
                new Order { ID="U", Amount=600 },
                new Order { ID="V", Amount=700 },
                new Order { ID="W", Amount=800 },
                new Order { ID="X", Amount=900 },
                new Order { ID="Y", Amount=1000 },
                new Order { ID="Z", Amount=1100 }
            };
            var customerIDs = from c in customers select c.ID;
            var orderIDs = from o in orders select o.ID;
            //Intersect():两个集合的交集
            var customersWithOrders = customerIDs.Intersect(orderIDs);
            Console.WriteLine("Customers IDs with Orders:");
            foreach (var item in customersWithOrders)
            {
                Console.Write("{0}  ", item);
            }
            Console.WriteLine();
            Console.WriteLine("Order IDs with no customers:");
            //Except():取得在一个集合中存在在另一个集合中不存在的数据Order中存在,Customer中不存在的ID值
            var ordersNoCustomers = orderIDs.Except(customerIDs);
            foreach (var item in ordersNoCustomers)
            {
                Console.Write("{0}  ", item);
            }
            Console.WriteLine();
            Console.WriteLine("All Customer and Order IDs:");
            //Union():两个集合的并集,没有重复
            var allCustomerOrderIDs = orderIDs.Union(customerIDs);
            foreach (var item in allCustomerOrderIDs)
            {
                Console.Write("{0}  ", item);
            }
            Console.WriteLine();

            //Join的用法
            var queryJoinResult = from c in customers join o in orders on c.ID equals o.ID select new { c.ID, c.City, SalesBefore = c.Sales, NewOrders = o.Amount, SalesAfter = c.Sales + o.Amount };
            foreach (var item in queryJoinResult)
            {
                Console.WriteLine(item);
            }
            Console.Write("Program finished,press Enter to return:");
            Console.ReadLine();
        }
  /// <summary>
        /// 测试string和int类型数组中使用Linq查询
        /// </summary>
        private static void StringIntTest()
        {
            string[] names = { "Alonso", "Zheng", "Smith", "Jones", "Smythes", "Small", "Ruiz", "Hsieh", "Jorgenson", "Ilyich", "Singh", "Samba", "Fatimah" };
            //按照最后一个字母排序
            //var queryResults = from n in names where n.StartsWith("S") orderby n.Substring(n.Length-1) select n;
            var queryResults = names.OrderBy(n => n.Substring(n.Length - 1)).Where(n => n.StartsWith("S"));

            Console.WriteLine("Names beginning with S:");
            foreach (var item in queryResults)
            {
                Console.WriteLine(item.ToString());
            }

            int[] numbers = generateLotsOfNumbers(12345678);
            var quereNumbers = from n in numbers where n < 1000 select n;
            Console.WriteLine("Numbers less than 1000:");
            foreach (var item in quereNumbers)
            {
                Console.WriteLine(item);
            }

            var queryNumbers = from n in numbers where n > 1000 select n;
            Console.WriteLine("Count of number>1000:");
            Console.WriteLine(queryNumbers.Count());
            Console.WriteLine("Max of number>1000:");
            Console.WriteLine(queryNumbers.Max());
            Console.WriteLine("Min of number>1000:");
            Console.WriteLine(queryNumbers.Min());
            Console.WriteLine("Average of number>1000:");
            Console.WriteLine(queryNumbers.Average());
            Console.WriteLine("Sum of number>1000:");
            Console.WriteLine(queryNumbers.Sum(n => (long)n));
            Console.Write("Program finished,press Enter to return:");
            Console.ReadLine();
        }

        private static int[] generateLotsOfNumbers(int count)
        {
            Random generator = new Random(0);
            int[] results = new int[count];
            for (int i = 0; i < count; i++)
            {
                results[i] = generator.Next();
            }
            return results;
        }



清晰完整PDF版本,是我从网上买来的 共 150MB,分为13个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 入门及应用 .NET 2010 SQL LINQ入门及应用 3/13 原价:48.00元 作者:王的强,张晓娜,周静 编著 出版社:清华大学 出版日期:2009-5-1 ISBN:9787302200253 字数:661000 页码:427 -------------------------------------------------------------------------------- 本书介绍微软最前沿的数据查询编程技术,内容由160个知识点实例加5个综合应用案例组成,光盘中提供了涉及到的全部示例源程序项目,对于将要从事正规商业开发的人员有很强的示范性和指导作用。 内容提要 -------------------------------------------------------------------------------- 本书系统、全面地介绍了微软最新推出的LINQ数据开发技术。   本书采取以实践为主、以理论为辅的方法,首先对C#新改进的一些语法做了详细的剖析,让读者领会C#语法的新特点,为后面的学习打下基础,然后对LINQ各个子句和组件进行了实例讲解,通过一个个生动的示例,带领读者由浅入深、系统地学习和掌握LINQ技术。   本书对开发步骤的详细介绍,有助于读者更好地掌握Microsoft Visual Studio 2008开发环境。各个章节中的综合实例,除了充分演示LINQ技术外,还努力引导读者适应面向对象的开发方式。   配书光盘中提供了书中所有的源程序(均为VS2008应用项目),全部项目均经过严格的测试并通过。   本书可供相关技术研究人员、广大.NET应用程序开发人员和用户参考,也可作为高等院校计算机、电子商务以及信息类专业的教材。 目录 -------------------------------------------------------------------------------- 第1章 LINQ介绍  1.1 什么是LINQ  1.2 为什么要用LINQ  1.3 搭建LINQ开发环境   1.3.1 安装 Visual Studio 2008   1.3.2 配置 Visual Studio 2008  1.4 初识LINQ技术   1.4.1 初识LINQ to Objects   1.4.2 初识LINQ to ADO.NET   1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性   2.2.1 自动属性和属性访问器的保护级别   2.2.2 可空类型   2.2.3 泛型   2.2.4 代理   2.2.5 迭代器与yield关键字   2.2.6 隐式类型的局部变量   2.2.7 对象和集合初始化器   2.2.8 匿名类型   2.2.9 扩展方法   2.2.10 匿名方法和Lamdba表达式  2.3 综合实例:C#高亮编辑及编译运行器  2.4 小结 第3章 LINQ基本子句介绍  3.1 概述  3.2 from子句   3.2.1 单个from子句   3.2.2 复合from子句   3.2.3 多个from子句  3.3 where子句   3.3.1 常见的where子句查询   3.3.2 在where子句中使用自定义函数   3.3.3 动态谓词的筛选  3.4 select子句   3.4.1 输出查询结果   3.4.2 对查询结果进行投影  3.5 group子句   3.5.1 IGrouping泛型接口   3.5.2 分组查询  3.6 into子句  3.7 排序子句   3.7.1 OrderBy和OrderByDescending   3.7.2 ThenBy和ThenByDescending  3.8 let子句  3.9 join子句  3.10 小结 第4章 用于集合、文件、字符串对象的LINQ(LINQ to Objects)  4.1 LINQ标准查询运算符概述  4.2 Enumerable类的介绍  4.3 用于延期执行的Enumerable类方法成员   4.3.1 Take方法   4.3.2 TakeWhile方法   4.3.3 Skip方法   4.3.4 SkipWhile方法   4.3.5 Take、TakeWhile、Skip、SkipWhile小结   4.3.6 Reverse方法   4.3.7 Distinct方法   4.3.8 Union方法   4.3.9 Concat方法   4.3.10 Intersect方法   4.3.11 Except方法   4.3.12 Range方法   4.3.13 Repeat方法   4.3.14 Empty方法   4.3.15 DefaultIfEmpty方法   4.3.16 Cast方法   4.3.17 OfType方法   4.3.18 AsEnumerable方法  4.4 用于立即执行的Enumerable类方法成员  4.5 综合实例  4.6 小结 第5章 用于数据库访问的LINQ (LINQ to SQL) 第6章 用于XML访问的LINQ (LINQ to XML) 第7章 综合应用实例:商品管理解决方案
清晰完整PDF版本,是我从网上买来的 共 150MB,分为13个分卷 在 CSDN 上只有我整个是清晰完整的 LINQ 入门及应用 .NET 2010 SQL LINQ入门及应用 11/13 原价:48.00元 作者:王的强,张晓娜,周静 编著 出版社:清华大学 出版日期:2009-5-1 ISBN:9787302200253 字数:661000 页码:427 -------------------------------------------------------------------------------- 本书介绍微软最前沿的数据查询编程技术,内容由160个知识点实例加5个综合应用案例组成,光盘中提供了涉及到的全部示例源程序项目,对于将要从事正规商业开发的人员有很强的示范性和指导作用。 内容提要 -------------------------------------------------------------------------------- 本书系统、全面地介绍了微软最新推出的LINQ数据开发技术。   本书采取以实践为主、以理论为辅的方法,首先对C#新改进的一些语法做了详细的剖析,让读者领会C#语法的新特点,为后面的学习打下基础,然后对LINQ各个子句和组件进行了实例讲解,通过一个个生动的示例,带领读者由浅入深、系统地学习和掌握LINQ技术。   本书对开发步骤的详细介绍,有助于读者更好地掌握Microsoft Visual Studio 2008开发环境。各个章节中的综合实例,除了充分演示LINQ技术外,还努力引导读者适应面向对象的开发方式。   配书光盘中提供了书中所有的源程序(均为VS2008应用项目),全部项目均经过严格的测试并通过。   本书可供相关技术研究人员、广大.NET应用程序开发人员和用户参考,也可作为高等院校计算机、电子商务以及信息类专业的教材。 目录 -------------------------------------------------------------------------------- 第1章 LINQ介绍  1.1 什么是LINQ  1.2 为什么要用LINQ  1.3 搭建LINQ开发环境   1.3.1 安装 Visual Studio 2008   1.3.2 配置 Visual Studio 2008  1.4 初识LINQ技术   1.4.1 初识LINQ to Objects   1.4.2 初识LINQ to ADO.NET   1.4.3 初识LINQ to XML  1.5 小结 第2章 C#语言的新特性及相关知识  2.1 .NET各个版本之间的关系  2.2 C#语言的新特性   2.2.1 自动属性和属性访问器的保护级别   2.2.2 可空类型   2.2.3 泛型   2.2.4 代理   2.2.5 迭代器与yield关键字   2.2.6 隐式类型的局部变量   2.2.7 对象和集合初始化器   2.2.8 匿名类型   2.2.9 扩展方法   2.2.10 匿名方法和Lamdba表达式  2.3 综合实例:C#高亮编辑及编译运行器  2.4 小结 第3章 LINQ基本子句介绍  3.1 概述  3.2 from子句   3.2.1 单个from子句   3.2.2 复合from子句   3.2.3 多个from子句  3.3 where子句   3.3.1 常见的where子句查询   3.3.2 在where子句中使用自定义函数   3.3.3 动态谓词的筛选  3.4 select子句   3.4.1 输出查询结果   3.4.2 对查询结果进行投影  3.5 group子句   3.5.1 IGrouping泛型接口   3.5.2 分组查询  3.6 into子句  3.7 排序子句   3.7.1 OrderBy和OrderByDescending   3.7.2 ThenBy和ThenByDescending  3.8 let子句  3.9 join子句  3.10 小结 第4章 用于集合、文件、字符串对象的LINQ(LINQ to Objects)  4.1 LINQ标准查询运算符概述  4.2 Enumerable类的介绍  4.3 用于延期执行的Enumerable类方法成员   4.3.1 Take方法   4.3.2 TakeWhile方法   4.3.3 Skip方法   4.3.4 SkipWhile方法   4.3.5 Take、TakeWhile、Skip、SkipWhile小结   4.3.6 Reverse方法   4.3.7 Distinct方法   4.3.8 Union方法   4.3.9 Concat方法   4.3.10 Intersect方法   4.3.11 Except方法   4.3.12 Range方法   4.3.13 Repeat方法   4.3.14 Empty方法   4.3.15 DefaultIfEmpty方法   4.3.16 Cast方法   4.3.17 OfType方法   4.3.18 AsEnumerable方法  4.4 用于立即执行的Enumerable类方法成员  4.5 综合实例  4.6 小结 第5章 用于数据库访问的LINQ (LINQ to SQL) 第6章 用于XML访问的LINQ (LINQ to XML) 第7章 综合应用实例:商品管理解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值