Linq standard query operator
Language set query Ganmge hteg.ratedQuw, LINQ, integrates queries in the C# programming language Syntax, you can use the same syntax to access different data sources. LINQ provides an abstraction layer for different data sources, so the same syntax can be used.
1Filter operator
Filter operator defines the conditions for returning elements.
Filter Operator | Description |
---|---|
Use predicates to return a Boolean value | |
Filter elements based on type |
where Usage:
var racers = from r in Formulal.Racers where r.Wins > 15 && r.Country == "Brazil" select r;OfTypeUsage:
object[] data = {"one", 2, "three", 4, 5, "six"}; var rtnData = data.OfType<string>(); //返回类型为string的数据元素集合2 Projection operatorConvert the object into a new object of another type
Description | |
---|---|
var racers = from r in Formulal.Racers where r.Wins > 15 && r.Country == "Brazil" select new { Name = string.Format("{0} {1}", r.FirstName, r.LastName), Country = r.Country, Wins = r.Wins }; //输出为含有Name,Country,Wins共计3个属性的对象集合
selectMany usage
var ferrariDrivers = Formulal.Racers. SelectMany(r => r.Cars, (r, c) => new { Racer = r, Car = c }). Where(r => r.Car == "Ferrari"). OrderBy(r => r.Racer.LastName). Select(r => r.Racer.FirstName + " " + r.Racer.LastName);//筛选出驾驶法拉利的选手集合3 Sorting operatorChange the order of returned elements
OrderByDescending | |
ThenBy | |
ThenByDescending | |
Reverse | |
GroupJoin | |
## | Result: |
Yearj
##Yearj=2004 | ||
---|---|---|
Yearj=2005 | Racerj=Fernando Alonso | |
Yearj=2006 | Racerj=Fernando Alonso | |
##Yearj=2007 | Racerj=Kimi Räikkönen | Teamj =Ferrari |
Yearj=2008 | Racerj=Lewis Hamilton | Teamj =Ferrari |
Yearj=2014 | Racerj=Lewis Hamilton | Teamj =Mercedes |
##Yearj=2015 | Racerj=Lewis Hamilton | Teamj =Mercedes |
Yearj=2009 | Racerj=Jenson Button | Teamj =Brawn GP |
Yearj=2010 | Racerj=Sebastian Vettel | Teamj =Red Bull Racing |
Yearj=2011 | Racerj=Sebastian Vettel | Teamj =Red Bull Racing |
Yearj=2012 | Racerj=Sebastian Vettel | Teamj = Red Bull Racing |
Yearj=2013 | Racerj=Sebastian Vettel | Teamj =Red Bull Racing |
5Combining Operators | Put data in groups |
GroupBy | Group elements with a common key |
---|---|
By creating a pair Multiple dictionaries to combine elements. | |
var countries = from r in Formulal.Racers group r by r.Country into g orderby g.Count() descending, g.Key where g.Count() > 2 select new { Country = g.Key, Count = g.Count() };//获取冠军次数大于2的国家 | Result:
Count
10 | |
---|---|
Finland | |
6 Quantifier operator | |
Determine whether there are elements in the set that satisfy the predicate function | |
---|---|
Contains | |
List<int> intList1 = new List<int>(5) {1, 2, 3, 4, 5}; bool any3 = intList1.Any(r => r == 3);//确定集合中是否有3,返回true bool any0 = intList1.Any(r => r == 0);//确定集合中是否有0,返回false bool allMoreZero = intList1.All(r => r > 0);//确定序列中所有元素都满足大于0,返回true bool allMore2 = intList1.All(r => r > 2); //返回false bool contains3 = intList1.Contains(3); //元素3是否在集合中,true | 7 Partition operator|
The number of elements to be extracted must be specified | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
TakeWhile | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SkipWhile | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
int pageSize = 5; int numberPages = (int)Math.Ceiling(Formulal.Racers.Count() / (double)pageSize); for (int page = 0; page < numberPages; page++) { var racersPartition = (from r in Formulal.Racers orderby r.LastName, r.FirstName select r.FirstName + " " + r.LastName).Skip(page * pageSize).Take(pageSize); } 结果: Page 0Fernando Alons Mario Andretti Alberto Ascari Jack Brabham Jenson ButtonPage 1Jim Clark Juan Manuel Fa Nino Farina Emerson Fittipaldi Mika Hakkinen Page 2Lewis Hamilton Mike Hawthorn Damon Hill Graham Hill Phil Hill 8集合操作符(Set operators)集合操作符返回 一 个集合。除了Distinct之外,其他都需要2个集合。
应用举例: List<int> intList1 = new List<int>(5) {1, 2, 3, 4, 5,3}; List<int> intList2 = new List<int>(3) {2, 5, 0}; var delDuplic = intList1.Distinct(); //去重,结果{1,2,3,4,5} var unionList = intList1.Union(intList2); //并集,结果{1,2,3,4,5,0} var interList = intList1.Intersect(intList2); //交集,结果{2,5} var exceptList = intList1.Except(intList2);//差集,结果{1,3,4} var exceptList2 = intList2.Except(intList1);//差集,结果{0} var unionList2 = intList1.Zip(intList2,((i1, i2) => i1+", "+i2)); 结果:{{1,2}{2,5}{3,0}} 9元素操作符(Element operators)这些元素操作符仅返回一 个元素。
应用举例: List<int> intList1 = new List<int>(5) { 1, 8, 3, 4, 5, 3 }; int firstMore1 = intList1.First(r => r > 1); //结果:8int firstMore17 = intList1.FirstOrDefault(r => r > 17); //结果:0(因为不存在)int lastMore3 = intList1.Last(r => r > 3); //结果5int last = intList1.ElementAt(2); //结果3,(索引从0开始) 10聚合操作符(Aggregate operators)聚合操作符计算集合的一个值。利用这些聚合操作符 ,可 以计算所有值的总和、所有元
public class MyIntClass { public string Name { get; set; } public int Integar { get; set; } public MyIntClass(string name, int i) { this.Name = name; this.Integar = Integar; } } List<MyIntClass> intList1 = new List<MyIntClass>(5) { new MyIntClass("first",1), new MyIntClass("second",8) , new MyIntClass("third",3) , new MyIntClass("fourth",4) , new MyIntClass("fifth",5) , new MyIntClass("sixth",3) }; int count = intList1.Count; int sum = intList1.Sum(r=>r.Integar); int min = intList1.Min(r => r.Integar); int max = intList1.Max(r => r.Integar); double average = intList1.Average(r => r.Integar); 11转换操作符(Conversion operators)转换操作符将集合转换为数组 :IEnumberable、 IList, IDictionary 等。
还是上面的例子 IEnumerable<MyIntClass> ienuList = from r in intList1 where r.Integar > 3 select r; //返回默认的IEnumerable集合 List<MyIntClass> ienuList2 = (from r in intList1 where r.Integar > 3 select r).ToList(); //返回List MyIntClass[] ienuList2 = (from r in intList1 where r.Integar > 3 select r).ToArray();//返回数组 var dict = (from r in intList1 where r.Integar > 3 select r).ToDictionary(r=>r.Name,r=>r.Integar); //字典,key是name, value:Integar IEnumerable<MyIntClass> ienuList2 = (from r in intList1 where r.Integar > 3 select r).AsEnumerable(); 12生成操作符(Generation operators)这些生成操作符返回 一 个新集合
IEnumerable<int> ints = Enumerable.Range(3, 10); //{3,4,5,6,7,8,9,10,11,12}IEnumerable<int> emptyInts = Enumerable.Empty<int>(); //生成一个空集合IEnumerable<int> ints2= Enumerable.Repeat(6,8); //生成8个6的集合 附:展示所用到的实体类和数据选手实体类//选手实体类 public class Racer { public Racer(string firstName = null, string lastName = null, string country = null, int starts = 0,int wins = 0, IEnumerable<int> years = null, IEnumerable<string> cars = null) { this.FirstName = firstName; this.LastName = lastName; this.Country = country; this.Starts = starts; this.Wins = wins; var yearList = new List<int>(); if (years != null) { foreach (var year in years) { yearList.Add(year); } this.Years = yearList.ToArray(); } if (cars != null) { var carList = new List<string>(); foreach (var car in cars) { carList.Add(car); } this.Cars = carList.ToArray(); } public string FirstName { get; set; } public string LastName { get; set; } //赢得比赛的次数 public int Wins { get; set; } //所属国家 public string Country { get; set; } //开始做的年龄 public int Starts { get; set; } //车型数组 public string[] Cars { get; private set; } //赢得冠军的年份 public int[] Years { get; private set; } } } 选手数据//选手实体类 public class Racer { public Racer(string firstName = null, string lastName = null, string country = null, int starts = 0,int wins = 0, IEnumerable<int> years = null, IEnumerable<string> cars = null) { this.FirstName = firstName; this.LastName = lastName; this.Country = country; this.Starts = starts; this.Wins = wins; var yearList = new List<int>(); if (years != null) { foreach (var year in years) { yearList.Add(year); } this.Years = yearList.ToArray(); } if (cars != null) { var carList = new List<string>(); foreach (var car in cars) { carList.Add(car); } this.Cars = carList.ToArray(); } public string FirstName { get; set; } public string LastName { get; set; } //赢得比赛的次数 public int Wins { get; set; } //所属国家 public string Country { get; set; } //开始做的年龄 public int Starts { get; set; } //车型数组 public string[] Cars { get; private set; } //赢得冠军的年份 public int[] Years { get; private set; } } } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 选手数据 //选手List public static List<Racer> Racers = new List<Racer>(40) { new Racer("Nino", "Farina", "Italy", 33, 5, new int[] { 1950 }, new string[] { "Alfa Romeo" }), new Racer("Alberto", "Ascari", "Italy", 32, 10, new int[] { 1952, 1953 }, new string[] { "Ferrari" }), new Racer("Juan Manuel", "Fangio", "Argentina", 51, 24, new int[] { 1951, 1954, 1955, 1956, 1957 }, new string[] { "Alfa Romeo", "Maserati", "Mercedes", "Ferrari" }), new Racer("Mike", "Hawthorn", "UK", 45, 3, new int[] { 1958 }, new string[] { "Ferrari" }), new Racer("Phil", "Hill", "USA", 48, 3, new int[] { 1961 }, new string[] { "Ferrari" }), new Racer("John", "Surtees", "UK", 111, 6, new int[] { 1964 }, new string[] { "Ferrari" }), new Racer("Jim", "Clark", "UK", 72, 25, new int[] { 1963, 1965 }, new string[] { "Lotus" }), new Racer("Jack", "Brabham", "Australia", 125, 14, new int[] { 1959, 1960, 1966 }, new string[] { "Cooper", "Brabham" }), new Racer("Denny", "Hulme", "New Zealand", 112, 8, new int[] { 1967 }, new string[] { "Brabham" }), new Racer("Graham", "Hill", "UK", 176, 14, new int[] { 1962, 1968 }, new string[] { "BRM", "Lotus" }), new Racer("Jochen", "Rindt", "Austria", 60, 6, new int[] { 1970 }, new string[] { "Lotus" }), new Racer("Jackie", "Stewart", "UK", 99, 27, new int[] { 1969, 1971, 1973 }, new string[] { "Matra", "Tyrrell" }), new Racer("Emerson", "Fittipaldi", "Brazil", 143, 14, new int[] { 1972, 1974 }, new string[] { "Lotus", "McLaren" }), new Racer("James", "Hunt", "UK", 91, 10, new int[] { 1976 }, new string[] { "McLaren" }), new Racer("Mario", "Andretti", "USA", 128, 12, new int[] { 1978 }, new string[] { "Lotus" }), new Racer("Jody", "Scheckter", "South Africa", 112, 10, new int[] { 1979 }, new string[] { "Ferrari" }), new Racer("Alan", "Jones", "Australia", 115, 12, new int[] { 1980 }, new string[] { "Williams" }), new Racer("Keke", "Rosberg", "Finland", 114, 5, new int[] { 1982 }, new string[] { "Williams" }), new Racer("Niki", "Lauda", "Austria", 173, 25, new int[] { 1975, 1977, 1984 }, new string[] { "Ferrari", "McLaren" }), new Racer("Nelson", "Piquet", "Brazil", 204, 23, new int[] { 1981, 1983, 1987 }, new string[] { "Brabham", "Williams" }), new Racer("Ayrton", "Senna", "Brazil", 161, 41, new int[] { 1988, 1990, 1991 }, new string[] { "McLaren" }), new Racer("Nigel", "Mansell", "UK", 187, 31, new int[] { 1992 }, new string[] { "Williams" }), new Racer("Alain", "Prost", "France", 197, 51, new int[] { 1985, 1986, 1989, 1993 }, new string[] { "McLaren", "Williams" }), new Racer("Damon", "Hill", "UK", 114, 22, new int[] { 1996 }, new string[] { "Williams" }), new Racer("Jacques", "Villeneuve", "Canada", 165, 11, new int[] { 1997 }, new string[] { "Williams" }), new Racer("Mika", "Hakkinen", "Finland", 160, 20, new int[] { 1998, 1999 }, new string[] { "McLaren" }), new Racer("Michael", "Schumacher", "Germany", 287, 91, new int[] { 1994, 1995, 2000, 2001, 2002, 2003, 2004 }, new string[] { "Benetton", "Ferrari" }), new Racer("Fernando", "Alonso", "Spain", 252, 32, new int[] { 2005, 2006 }, new string[] { "Renault" }), new Racer("Kimi", "Räikkönen", "Finland", 230, 20, new int[] { 2007 }, new string[] { "Ferrari" }), new Racer("Lewis", "Hamilton", "UK", 166, 43, new int[] { 2008, 2014, 2015 }, new string[] { "McLaren", "Mercedes" }), new Racer("Jenson", "Button", "UK", 283, 15, new int[] { 2009 }, new string[] { "Brawn GP" }), new Racer("Sebastian", "Vettel", "Germany", 156, 42, new int[] { 2010, 2011, 2012, 2013 }, new string[] { "Red Bull Racing" }) }; 团队实体类[Serializable] public class Team { public Team(string name, params int[] years) { this.Name = name; this.Years = years; } public string Name { get; private set; } public int[] Years { get; private set; } } 团队数据//冠军团队List public static List<Team> ChampionTeams = new List<Team>() { new Team("Vanwall", 1958), new Team("Cooper", 1959, 1960), new Team("Ferrari", 1961, 1964, 1975, 1976, 1977, 1979, 1982, 1983, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008), new Team("BRM", 1962), new Team("Lotus", 1963, 1965, 1968, 1970, 1972, 1973, 1978), new Team("Brabham", 1966, 1967), new Team("Matra", 1969), new Team("Tyrrell", 1971), new Team("McLaren", 1974, 1984, 1985, 1988, 1989, 1990, 1991, 1998), new Team("Williams", 1980, 1981, 1986, 1987, 1992, 1993, 1994, 1996, 1997), new Team("Benetton", 1995), new Team("Renault", 2005, 2006), new Team("Brawn GP", 2009), new Team("Red Bull Racing", 2010, 2011, 2012, 2013), new Team("Mercedes", 2014, 2015) }; 以上就是C#Linq查询操作使用举例的内容,更多相关内容请关注PHP中文网(www.php.cn)! |

如何使用C#编写时间序列预测算法时间序列预测是一种通过分析过去的数据来预测未来数据趋势的方法。它在很多领域,如金融、销售和天气预报中有广泛的应用。在本文中,我们将介绍如何使用C#编写时间序列预测算法,并附上具体的代码示例。数据准备在进行时间序列预测之前,首先需要准备好数据。一般来说,时间序列数据应该具有足够的长度,并且是按照时间顺序排列的。你可以从数据库或者

如何使用Redis和C#开发分布式事务功能引言分布式系统的开发中,事务处理是一项非常重要的功能。事务处理能够保证在分布式系统中的一系列操作要么全部成功,要么全部回滚。Redis是一种高性能的键值存储数据库,而C#是一种广泛应用于开发分布式系统的编程语言。本文将介绍如何使用Redis和C#来实现分布式事务功能,并提供具体代码示例。I.Redis事务Redis

如何实现C#中的人脸识别算法人脸识别算法是计算机视觉领域中的一个重要研究方向,它可以用于识别和验证人脸,广泛应用于安全监控、人脸支付、人脸解锁等领域。在本文中,我们将介绍如何使用C#来实现人脸识别算法,并提供具体的代码示例。实现人脸识别算法的第一步是获取图像数据。在C#中,我们可以使用EmguCV库(OpenCV的C#封装)来处理图像。首先,我们需要在项目

Redis在C#开发中的应用:如何实现高效的缓存更新引言:在Web开发中,缓存是提高系统性能的常用手段之一。而Redis作为一款高性能的Key-Value存储系统,能够提供快速的缓存操作,为我们的应用带来了不少便利。本文将介绍如何在C#开发中使用Redis,实现高效的缓存更新。Redis的安装与配置在开始之前,我们需要先安装Redis并进行相应的配置。你可以

如何使用C#编写动态规划算法摘要:动态规划是求解最优化问题的一种常用算法,适用于多种场景。本文将介绍如何使用C#编写动态规划算法,并提供具体的代码示例。一、什么是动态规划算法动态规划(DynamicProgramming,简称DP)是一种用来求解具有重叠子问题和最优子结构性质的问题的算法思想。动态规划将问题分解成若干个子问题来求解,通过记录每个子问题的解,

如何实现C#中的图像压缩算法摘要:图像压缩是图像处理领域中的一个重要研究方向,本文将介绍在C#中实现图像压缩的算法,并给出相应的代码示例。引言:随着数字图像的广泛应用,图像压缩成为了图像处理中的重要环节。压缩能够减小存储空间和传输带宽,并能提高图像处理的效率。在C#语言中,我们可以通过使用各种图像压缩算法来实现对图像的压缩。本文将介绍两种常见的图像压缩算法:

C#开发中如何处理跨域请求和安全性问题在现代的网络应用开发中,跨域请求和安全性问题是开发人员经常面临的挑战。为了提供更好的用户体验和功能,应用程序经常需要与其他域或服务器进行交互。然而,浏览器的同源策略导致了这些跨域请求被阻止,因此需要采取一些措施来处理跨域请求。同时,为了保证数据的安全性,开发人员还需要考虑一些安全性问题。本文将探讨C#开发中如何处理跨域请

如何在C#中实现遗传算法引言:遗传算法是一种模拟自然选择和基因遗传机制的优化算法,其主要思想是通过模拟生物进化的过程来搜索最优解。在计算机科学领域,遗传算法被广泛应用于优化问题的解决,例如机器学习、参数优化、组合优化等。本文将介绍如何在C#中实现遗传算法,并提供具体的代码示例。一、遗传算法的基本原理遗传算法通过使用编码表示解空间中的候选解,并利用选择、交叉和


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Dreamweaver Mac version
Visual web development tools

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

Atom editor mac version download
The most popular open source editor

SublimeText3 Linux new version
SublimeText3 Linux latest version
