欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 编程语言 > c# >内容正文

c#

c#——linq技术demo -凯发k8官方网

发布时间:2024/10/5 c# 30 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 c#——linq技术demo 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

linq(language integrated query) :linq(language integrated query)语言集成查询是一组用于c#和visual basic语言的扩展。它允许编写c#或者visual basic代码以操作内存数据的方式,查询数据库。

已有racer类和冠军车手数据,进行以下查询,并打印结果:

1)查询来自英国(uk)的所有世界冠军,并按胜利场数降序排列。

输出结果时,可用console.writeline("{0:a}", racer)或writeline($"{racer:a}");。

2)使用linq方法语法重写这个查询。

3)体会linq的推迟查询:首先建立查询query2,查出所有胜利场数超过25,用foreach循环并打印;然后将所有英国(uk)车手的国名改为“united kingdom”;再次对query2用foreach循环并打印。观赛同一查询的不同执行结果。

4)查出首发场数超过100,并且胜利场数超过20的车手的姓名(包含名和姓)。

5)基于现有数据,统计德国人的胜利总场数。

6)进行投影查询,对于驾驭法拉利(ferrari)车型夺冠的车手,输出人名、国别与首发胜率,人名包含名和姓,首发胜率为wins除以starts。 

using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks;namespace homework8 {public class racer : icomparable, iformattable{public racer(string firstname = null, string lastname = null, string country = null, int starts = 0, int wins = 0, ienumerable years = null, ienumerable cars = null){this.firstname = firstname;this.lastname = lastname;this.country = country;this.starts = starts;this.wins = wins;var yearslist = new list();foreach (var year in years){yearslist.add(year);}this.years = yearslist.toarray();var carlist = new list();foreach (var car in cars){carlist.add(car);}this.cars = carlist.toarray();}public string firstname { get; set; }public string lastname { get; set; }public string country { get; set; }public int wins { get; set; }//夺冠场数public int starts { get; set; }//首发场数public string[] cars { get; private set; }//赛车手获得冠军那一年使用的所有车型public int[] years { get; private set; }//赛车手获得冠军的年份public override string tostring(){return string.format("{0} {1}", firstname, lastname);}public int compareto(racer other){if (other == null) throw new argumentnullexception("other");return this.lastname.compareto(other.lastname);}public string tostring(string format){return tostring(format, null);}public string tostring(string format,iformatprovider formatprovider){switch (format){case null:case "n":return tostring();case "f":return firstname;case "l":return lastname;case "c":return country;case "s":return starts.tostring();case "w":return wins.tostring();case "a":return string.format("{0} {1}, {2}; starts: {3}, wins: {4}",firstname, lastname, country, starts, wins);default:throw new formatexception(string.format("format {0} not supported", format));}}public static ilist getchampions()//1950-2008年一级方程式锦标赛冠军{ilist racers = new list(40);racers.add(new racer("nino", "farina", "italy", 33, 5, new int[] { 1950 }, new string[] { "alfa romeo" }));racers.add(new racer("alberto", "ascari", "italy", 32, 10, new int[] { 1952, 1953 }, new string[] { "ferrari" }));racers.add(new racer("juan manuel", "fangio", "argentina", 51, 24, new int[] { 1951, 1954, 1955, 1956, 1957 }, new string[] { "alfa romeo", "maserati", "mercedes", "ferrari" }));racers.add(new racer("mike", "hawthorn", "uk", 45, 3, new int[] { 1958 }, new string[] { "ferrari" }));racers.add(new racer("phil", "hill", "usa", 48, 3, new int[] { 1961 }, new string[] { "ferrari" }));racers.add(new racer("john", "surtees", "uk", 111, 6, new int[] { 1964 }, new string[] { "ferrari" }));racers.add(new racer("jim", "clark", "uk", 72, 25, new int[] { 1963, 1965 }, new string[] { "lotus" }));racers.add(new racer("jack", "brabham", "australia", 125, 14, new int[] { 1959, 1960, 1966 }, new string[] { "cooper", "brabham" }));racers.add(new racer("denny", "hulme", "new zealand", 112, 8, new int[] { 1967 }, new string[] { "brabham" }));racers.add(new racer("graham", "hill", "uk", 176, 14, new int[] { 1962, 1968 }, new string[] { "brm", "lotus" }));racers.add(new racer("jochen", "rindt", "austria", 60, 6, new int[] { 1970 }, new string[] { "lotus" }));racers.add(new racer("jackie", "stewart", "uk", 99, 27, new int[] { 1969, 1971, 1973 }, new string[] { "matra", "tyrrell" }));racers.add(new racer("emerson", "fittipaldi", "brazil", 143, 14, new int[] { 1972, 1974 }, new string[] { "lotus", "mclaren" }));racers.add(new racer("james", "hunt", "uk", 91, 10, new int[] { 1976 }, new string[] { "mclaren" }));racers.add(new racer("mario", "andretti", "usa", 128, 12, new int[] { 1978 }, new string[] { "lotus" }));racers.add(new racer("jody", "scheckter", "south africa", 112, 10, new int[] { 1979 }, new string[] { "ferrari" }));racers.add(new racer("alan", "jones", "australia", 115, 12, new int[] { 1980 }, new string[] { "williams" }));racers.add(new racer("keke", "rosberg", "finland", 114, 5, new int[] { 1982 }, new string[] { "williams" }));racers.add(new racer("niki", "lauda", "austria", 173, 25, new int[] { 1975, 1977, 1984 }, new string[] { "ferrari", "mclaren" }));racers.add(new racer("nelson", "piquet", "brazil", 204, 23, new int[] { 1981, 1983, 1987 }, new string[] { "brabham", "williams" }));racers.add(new racer("ayrton", "senna", "brazil", 161, 41, new int[] { 1988, 1990, 1991 }, new string[] { "mclaren" }));racers.add(new racer("nigel", "mansell", "uk", 187, 31, new int[] { 1992 }, new string[] { "williams" }));racers.add(new racer("alain", "prost", "france", 197, 51, new int[] { 1985, 1986, 1989, 1993 }, new string[] { "mclaren", "williams" }));racers.add(new racer("damon", "hill", "uk", 114, 22, new int[] { 1996 }, new string[] { "williams" }));racers.add(new racer("jacques", "villeneuve", "canada", 165, 11, new int[] { 1997 }, new string[] { "williams" }));racers.add(new racer("mika", "hakkinen", "finland", 160, 20, new int[] { 1998, 1999 }, new string[] { "mclaren" }));racers.add(new racer("michael", "schumacher", "germany", 250, 91, new int[] { 1994, 1995, 2000, 2001, 2002, 2003, 2004 }, new string[] { "benetton", "ferrari" }));racers.add(new racer("fernando", "alonso", "spain", 132, 21, new int[] { 2005, 2006 }, new string[] { "renault" }));racers.add(new racer("kimi", "r?ikk?nen", "finland", 148, 17, new int[] { 2007 }, new string[] { "ferrari" }));racers.add(new racer("lewis", "hamilton", "uk", 44, 9, new int[] { 2008 }, new string[] { "mclaren" }));return racers;}}/*利用linq技术查询racer对象已有racer类和冠军车手数据,进行以下查询,并打印结果:1)查询来自英国(uk)的所有世界冠军,并按胜利场数降序排列。输出结果时,可用console.writeline("{0:a}", racer)或writeline($"{racer:a}");。2)使用linq方法语法重写这个查询。3)体会linq的推迟查询:首先建立查询query2,查出所有胜利场数超过25,用foreach循环并打印;然后将所有英国(uk)车手的国名改为“united kingdom”;再次对query2用foreach循环并打印。观赛同一查询的不同执行结果。4)查出首发场数超过100,并且胜利场数超过20的车手的姓名(包含名和姓)。5)基于现有数据,统计德国人的胜利总场数。6)进行投影查询,对于驾驭法拉利(ferrari)车型夺冠的车手,输出人名、国别与首发胜率,人名包含名和姓,首发胜率为wins除以starts。 */class program{static void main(string[] args){console.writeline("1)查询来自英国(uk)的所有世界冠军,并按胜利场数降序排列。");list list = new list(racer.getchampions());list.sort((a,b) => {return b.wins - a.wins;});foreach (var racer in list){if(racer.country == "uk")console.writeline("{0:a}", racer);}console.writeline("2)使用linq方法语法重写这个查询。");var query1 = from r in racer.getchampions()where r.country == "uk"orderby r.wins descendingselect r;foreach (var racer in query1){console.writeline("{0:a}", racer);}console.writeline("3)体会linq的推迟查询:首先建立查询query2,查出所有胜利场数超过25,用foreach循环并打印;然后将所有英国(uk)车手的国名改为“united kingdom”;再次对query2用foreach循环并打印。观赛同一查询的不同执行结果。");var query2 = from r in racer.getchampions()where r.wins > 25orderby r.wins descendingselect r;foreach (var racer in query2){console.writeline("{0:a}", racer);if (racer.country == "uk")racer.country = "united kingdom";}foreach (var racer in query2){console.writeline("{0:a}", racer);}console.writeline("4)查出首发场数超过100,并且胜利场数超过20的车手的姓名(包含名和姓)。");var query3 = from r in racer.getchampions()where r.starts >100 where r.wins > 20orderby r.wins descendingselect r.firstname " " r.lastname;foreach (var racer in query3){console.writeline("{0:a}", racer);}console.writeline("5)基于现有数据,统计德国人的胜利总场数。");var query4 = from r in racer.getchampions()where r.country == "germany"orderby r.wins descendingselect r.wins;console.writeline(query4.sum());console.writeline("6)进行投影查询,对于驾驭法拉利(ferrari)车型夺冠的车手,输出人名、国别与首发胜率,人名包含名和姓,首发胜率为wins除以starts。");var query5 = from r in racer.getchampions()from c in r.carswhere c == "ferrari"orderby r.wins descendingselect new { name = r.firstname " " r.lastname , country=r.country, rate=(double)r.wins/r.starts };foreach (var racer in query5){console.writeline("{0:a}", racer);}}} }

https://www.pianshen.com/article/159246876/

https://www.cnblogs.com/hackpig/archive/2010/02/15/1668448.html

https://www.cnblogs.com/chquwa/p/3792901.html

https://blog.csdn.net/liujunjie612/article/details/46639417

与50位技术专家面对面20年技术见证,附赠技术全景图

总结

以上是凯发k8官方网为你收集整理的c#——linq技术demo的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

网站地图