首页 [定稿]C 2008 LINQ基础- LINQ语法

[定稿]C 2008 LINQ基础- LINQ语法

举报
开通vip

[定稿]C 2008 LINQ基础- LINQ语法[定稿]C 2008 LINQ基础- LINQ语法 C# 2008 LINQ基础- LINQ语法 Posted on 2008-02-22 13:56 sunrack 阅读(614) 评论(1) 编辑 收藏 网摘 所属分类: C# 2008 一、LINQ查询符列表 Query Meaning in Life Operators Used to define the backbone for any LINQ expression, which allows you to extract a subset ...

[定稿]C  2008 LINQ基础- LINQ语法
[定稿]C 2008 LINQ基础- LINQ语法 C# 2008 LINQ基础- LINQ语法 Posted on 2008-02-22 13:56 sunrack 阅读(614) 评论(1) 编辑 收藏 网摘 所属分类: C# 2008 一、LINQ查询符列表 Query Meaning in Life Operators Used to define the backbone for any LINQ expression, which allows you to extract a subset of from, in data from a fitting container. where Used to define a restriction for which items to extract from a container. select Used to select a sequence from the container. Performs joins based on specified key. Remember, these “joins” do not need to have anything to join, on, equals, into do with data in a relational database. orderby, ascending, Allows the resulting subset to be ordered in ascending or descending order. descending group, by Yields a subset with data grouped by a specified value. 另外还有一些没有操作符号,而是以扩展函数(泛型函数)的方式提供的函数: 用不同方式产生结果集: Reverse<>(), ToArray<>(), ToList<>() 集合操作: Distinct<>(), Union<>(), Intersect<>() 统计函数: Count<>(), Sum<>(), Min<>(), Max<>() 二、使用Enumerable获取Counts 为了使用这些Enumerable扩展函数,一般把LINQ查询表达式用括号括起来,先转换为IEnumerable兼容的对象。 static void GetCount() { string[] currentVideoGames = {"Morrowind", "BioShock", "Half Life 2: Episode 1", "The Darkness", "Daxter", "System Shock 2"}; // Get count from the query. int numb = (from g in currentVideoGames where g.Length > 6 orderby g select g).Count(); // numb is the value 5. Console.WriteLine("{0} items honor the LINQ query.", numb); } 三、定义演示的实例 class Car { public string PetName = string.Empty; public string Color = string.Empty; public int Speed; public string Make = string.Empty; public override string ToString() { return string.Format("Make={0}, Color={1}, Speed={2}, PetName={3}", Make, Color, Speed, PetName); } } static void Main(string[] args) { Console.WriteLine("***** Fun with Query Expressions *****\n"); // This array will be the basis of our testing Car[] myCars = new [] { new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"}, new Car{ PetName = "Hank", Color = "Tan", Speed = 0, Make = "Ford"}, new Car{ PetName = "Sven", Color = "White", Speed = 90, Make = "Ford"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Zippy", Color = "Yellow", Speed = 55, Make = "VW"}, new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"} }; // We will call various methods here! Console.ReadLine(); } 四、LINQ语法 基本语法 var result = from item in container orderby value ascending/descending select item; 1、获取全部 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 var allCars = from c in myCars select c; 2、只获取字段名称 var names = from c in myCars select c.PetName; 这里names就是隐式类型的变量。 3、使用Enumerable.Distinct() var makes = (from c in myCars select c.Make).Distinct(); 4、即可以在定义的时候调用Enumberalbe扩展函数 var names = from c in myCars select c.PetName; foreach (var n in names) { Console.WriteLine("Name: {0}", n); } 也可以在兼容的数组类型上调用 var makes = from c in myCars select c.Make; Console.WriteLine("Distinct makes:"); foreach (var m in makes.Distinct()) { Console.WriteLine("Make: {0}", m); } // Now get only the BMWs. var onlyBMWs = from c in myCars where c.Make == "BMW" select c; // Get BMWs going at least 100 mph. var onlyFastBMWs = from c in myCars where c.Make == "BMW" && c.Speed >= 100 select c; 5、生成新的数据类型(投影) var makesColors = from c in myCars select new {c.Make, c.Color}; 6、Reverse() var subset = (from c in myCars select c).Reverse(); foreach (Car c in subset) { Console.WriteLine("{0} is going {1} MPH", c.PetName, c.Speed); } 或者 var subset = from c in myCars select c; foreach (Car c in subset.Reverse()) { Console.WriteLine(c.ToString()); } 7、排序 默认是ascending // Order all the cars by PetName. var subset = from c in myCars orderby c.PetName select c; // Now find the cars that are going less than 55 mph, // and order by descending PetName subset = from c in myCars where c.Speed > 55 orderby c.PetName descending select c; 默认顺序时也可以明确指明 var subset = from c in myCars orderby c.PetName ascending select c; 8、Enumerable.Except() 两个IEnumerable兼容的对象的差集 static void GetDiff() { List myCars = new List { "Yugo", "Aztec", "BMW"}; List yourCars = new List { "BMW", "Saab", "Aztec" }; var carDiff =(from c in myCars select c) .Except(from c2 in yourCars select c2); Console.WriteLine("Here is what you don't have, but I do:"); foreach (string s in carDiff) Console.WriteLine(s); // Prints Yugo. } 五、使用LINQ查询结果 如果查询结果是强类型的,如string[],List等,就可以不用var类型,而是使用合适的IEnumerable或 IEnumerable(因为IEnumerable也扩展了IEnumerable)类型。 class Program { static void Main(string[] args) { Console.WriteLine("***** LINQ Transformations *****\n"); IEnumerable subset = GetStringSubset(); foreach (string item in subset) { Console.WriteLine(item); } Console.ReadLine(); } static IEnumerable GetStringSubset() { string[] currentVideoGames = {"Morrowind", "BioShock", "Half Life 2: Episode 1", "The Darkness", "Daxter", "System Shock 2"}; // Note subset is an IEnumerable compatible object. IEnumerable subset = from g in currentVideoGames where g.Length > 6 orderby g select g; return subset; } } 只有该函数原型返回类型是IEnumerable,才可以使用var定义返回结果集类型。 但是在投影操作中,由于结果集合类型是隐式的,在编译时才能确定,所以这里强制规定必须使用var // Error! Can't return a var data type! static var GetProjectedSubset() { Car[] myCars = new Car[] { new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"}, new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"} }; var makesColors = from c in myCars select new { c.Make, c.Color }; return makesColors; // Nope! } 可以使用ToArray()把投影结果集转化为标志的CRL数组对象: // Return value is now an Array. static Array GetProjectedSubset() { Car[] myCars = new Car[]{ new Car{ PetName = "Henry", Color = "Silver", Speed = 100, Make = "BMW"}, new Car{ PetName = "Daisy", Color = "Tan", Speed = 90, Make = "BMW"}, new Car{ PetName = "Mary", Color = "Black", Speed = 55, Make = "VW"}, new Car{ PetName = "Clunker", Color = "Rust", Speed = 5, Make = "Yugo"}, new Car{ PetName = "Melvin", Color = "White", Speed = 43, Make = "Ford"} }; var makesColors = from c in myCars select new { c.Make, c.Color }; // Map set of anonymous objects to an Array object. // Here were are relying on type inference of the generic // type parameter, as we don't know the type of type! return makesColors.ToArray(); } 然后,就可以这样使用: Array objs = GetProjectedSubset(); foreach (object o in objs) { Console.WriteLine(o); // Calls ToString() on each anonymous object. } 注意: 1、不能给ToArray()指定类型,因为这里是隐式类型,到编译时才可用。 2、不能使用System.Array 的定义语法,只能使用该对象,同样因为隐式类型。 3、当需要使用投影的查询结果集时,把其转换为Array类型是必须的,当然这样会丢失强类型的好处。 Lambda 表达式 扩展方法 匿名类型 隐式类型化部变量 对象初始值 查询表达式 一步一步学Linq to sql 作者:lovecherry 来源:博客园 时间:2008-09-26 阅读:20 次 , 一步一步学Linq to sql(一):预备知识 (2008-09-26) , 一步一步学Linq to sql(二):DataContext与实体 (2008-09-26) , 一步一步学Linq to sql(三):增删改 (2008-09-26) , 一步一步学Linq to sql(四):查询句法 (2008-09-26) , 一步一步学Linq to sql(五):存储过程 (2008-09-26) , 一步一步学Linq to sql(六):探究特性 (2008-09-26) , 一步一步学Linq to sql(七):并发与事务 (2008-09-26) , 一步一步学Linq to sql(八):继承与关系 (2008-09-26) , 一步一步学Linq to sql(九):其它补充 (2008-09-26) , 一步一步学Linq to sql(十):分层构架的例子 (2008-09-26) 页: 1
本文档为【[定稿]C 2008 LINQ基础- LINQ语法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_731942
暂无简介~
格式:doc
大小:30KB
软件:Word
页数:0
分类:
上传时间:2018-02-22
浏览量:4