C#学习日记 LINQ语句

    xiaoxiao2021-03-25  64

    自己做的一些查询有错误。

    using System; using System.Collections.Generic; using System.Linq; namespace Sample.LINQ { public class MainEntryPoint { static int Main(string[] args) { //LinqQuery(); /*var names = new List<string>{ "Nino", "Alberto", "Juan", "Mike", "Phil"}; var nameWithJ = from n in names where n.StartsWith("J") orderby n select n; Console.Write("Before:"); foreach(string n in nameWithJ) { Console.Write(" "+n); } names.Add("John"); names.Add("Jack"); names.Add("Jim"); Console.WritLine(); Console.Write("After:"); foreach(string n in nameWithJ) { Console.Write(" "+n); }*/ /*var names = new List<string>{ "Nino", "Alberto", "Juan", "Mike", "Phil"}; var nameWithJ = (from n in names where n.StartsWith("J") orderby n select n).ToList(); Console.Write("Before:"); foreach(string n in nameWithJ) { Console.Write(" "+n); } names.Add("John"); names.Add("Jack"); names.Add("Jim"); Console.WritLine(); Console.Write("After:"); foreach(string n in nameWithJ) { Console.Write(" "+n); }*/ /*var racers = from r in Formula1.GetRacers() where (r.Wins > 15) && (r.Country == "USA" || r.Country == "UK") select r; foreach(Racer r in racers) { Console.WriteLine("{0:A}", r); }*/ /*var racers = Formula1.GetRacers(). Where( r => (r.Wins > 15) && (r.Country == "USA" || r.Country =="UK")). Select( r => r); foreach(Racer r in racers) { Console.WriteLine("{0:A}", r); }*/ /*var racers = Formula1.GetRacers(). Where( (r, index) => r.LastName.StartsWith("A") && index % 2 == 0). Select( r => r); foreach(Racer r in racers) { Console.WriteLine("{0:A}", r); }*/ /*object[] data ={ 123, "abc", 456, "def"}; var query = data.OfType<string>(); foreach(var s in query) { Console.WriteLine(s); }*/ /*var query = from r in Formula1.GetRacers() from c in r.Cars where c == "Ferrari" select r.LastName+" "+r.FirstName; foreach(string s in query) { Console.WriteLine(s); }*/ /*var result = Formula1.GetRacers(). SelectMany(r => r.Cars, (r, c) => new{ Racer = r, Car = c}). Where( r => r.Car = "Ferrari"). Select(r => r.FirstName+" "+r.LastName); foreach(string s in result) { Console.WriteLine(s); }*/ /*var racers = from r in Formula1.GetRacers() where r.Country == "UK" orderby r.Wins descending select r;*/ /*var racers = Formula1.GetRacers(). Where( r => r.Country == "UK"). OrderByDescending(r => r.Wins). Select(r => r);*/ /*var racers = from r in Formula1.GetRacers() orderby r.Country, r.FirstName, r.LastName select r; var racers = Formula1.GetRacers(). OrderBy(r => r.Country). ThenBy( r => r.FirstName). ThenBy( r => r.LastName). Select( r => r);*/ /*var query = from r in Formula1.GetRacers() group r by r.Country into g orderby g.Count() descending, g.Key where g.Count() >= 2 select new{ Count = g.Count(), Country = g.Key }; var query = Formula1.GetRacers(). GroupBy( r => r.Country). OrderBy( g => g.Count()). ThenBy( g => g.Key). Where( g => g.Count() >= 2). Select( g => new {Country = g.Key, Count = g.Count()}); foreach(var i in query) { Console.WriteLine("{0} {1}",i.Country , i.Count); }*/ /*var result = from r in Formula1.GetRacers() group r by r.Country into g orderby g.Count() descending,g.Key where g.Count() >= 2 select new { Count = g.Count(), Country = g.Key, Racers = from r1 in g orderby r1.LastName select r1.FirstName+" "+r1.LastName }; foreach(var i in result) { Console.WriteLine("{0,-10} {1}",i.Country, i.Count); foreach(var r in i.Racers) { Console.WriteLine(r); } }*/ /*var racers = from r in Formula1.GetRacers() from y in r.Years select new{ Year = y, Name = r.FirstName+" "+r.LastName }; var teams = from t in Formula1.GetTeams() from y in t.Years select new{ Name = t.Name, Year = y }; var result = from r in racers join t in teams on r.Year equals t.Year select new{ r.Year, TeamName = t.Name, Name = r.Name };*/ /*var racers = from r in Formula1.GetRacers() from y in r.Years select new{ Year = y, Name = r.FirstName+" "+r.LastName }; var teams = from t in Formula1.GetTeams() from y in t.Years select new{ Name = t.Name, Year = y }; var result = from r in racers join t in teams on r.Year equals t.Year into rt from t in rt.DefaultIfEmpty() orderby r.Year select new{ r.Year, TeamName = t==null ? "no team":t.Name, Name = r.Name }; foreach(var i in result) { Console.WriteLine("{0} {1} {2}",i.TeamName, i.Name, i.Year); }*/ //有错误 /*var racersList = Formula1.GetRacerTeamShip(). SelectMany( rts => new List<RacerInfo>() { new RacerInfo{ Year = rts.Year, Position = 1, FirstName = rts.First.FirstName(), LastName = rts.First.LastName() }, new RacerInfo{ Year = rts.Year, Position = 2, FirstName = rts.Second.FirstName(), LastName = rts.Second.LastName() }, new RacerInfo{ Year = rts.Year, Position = 3, FirstName = rts.Third.FirstName(), LastName = rts.Third.LastName() } }); var result = from r in Formula1.GetRacers() join r2 in racersList on new { FirstName = r.FirstName, LastName = r.LastName } equals new { FirstName = r2.FirstName, LastName = r2.LastName } into yearResults select new { FirstName = r.FirstName, LastName = r.LastName, Wins = r.Wins, Starts = r.Starts, Result = yearResults }; foreach(var i in result) { Console.WriteLine("{0} {1}", i.FirstName, i.LastName); foreach(var j in i.Results) { Console.WriteLine("{0} {1}",j.Year, j.Position); } }*/ /*foreach(var i in racersList) { Console.WriteLine("{0} {1} {2} {3}", i.Year, i.FirstName, i.LastName, i.Position); }*/ /*var ferrariDrivers = from r in Formula1.GetRacers() from c in r.Cars where c == "Ferrari" select r;*/ /*var ferrariDrivers = GetRacersByCar("Ferrari"); Func<string, IEnumerable<Racer>> racersByCar = car => from r in Formula1.GetRacers() from c in r.Cars where c == car select r; foreach(Racer r in ferrariDrivers.Intersect(racersByCar("Alfa Romeo"))) { Console.WriteLine("{0:A}", r); }*/ /*var racersName = from r in Formula1.GetRacers() where r.Country == "UK" orderby r.Wins descending select new { Name = r.FirstName + " "+r.LastName }; var racersNameAndStarts = from r in Formula1.GetRacers() where r.Country == "UK" orderby r.Wins descending select new { LastName = r.LastName, Starts = r.Starts }; var racers = racersName.Zip(racersNameAndStarts, (first, second) => first.Name + " ,Starts:"+second.Starts); foreach(var i in racers) { Console.WriteLine(i); }*/ /*int pagesize = 2; int numberPages = (int)Math.Ceiling(Formula1.GetRacers().Count()/(double)(pagesize)); for(int i = 0; i < numberPages ; i++) { Console.WriteLine("Page {0}:",i); var racers = (from r in Formula1.GetRacers() orderby r.LastName, r.FirstName select r.FirstName + " " +r.LastName). Skip(pagesize * i).Take(pagesize); foreach(var name in racers) { Console.WriteLine(name); } }*/ /*var query = from r in Formula1.GetRacers() let yearsCount = r.Years.Count() where yearsCount >= 1 orderby yearsCount descending, r.LastName select new { Name = r.FirstName + " " +r.LastName, YearsCount = yearsCount }; foreach(var i in query) { Console.WriteLine(i.Name+" "+i.YearsCount); }*/ /*var query = (from x in (from r in Formula1.GetRacers() group r by r.Country into c select new { Country = c.Key, Wins = (from r1 in c select r1.Wins).Sum() }) orderby x.Wins descending, x.Country select x).Take(3); foreach(var i in query) { Console.WriteLine(i.Country+" "+i.Wins); }*/ /*List<Racer> list = (from r in Formula1.GetRacers() where r.Starts > 20 orderby r.Starts descending select r).ToList(); foreach(Racer r in list) { Console.WriteLine("{0:A}", r); }*/ /*var query = (from r in Formula1.GetRacers() from c in r.Cars select new { Car = c, Racer = r }).ToLookup( r => r.Car, r => r.Racer); if(query.Contains("Ferrari")) { foreach(var i in query["Ferrari"]) { Console.WriteLine("{0:A}",i); } }*/ var list = new System.Collections.ArrayList(Formula1.GetRacers() as System.Collections.ICollection); var query = from r in list.Cast<Racer>() where r.Country == "UK" orderby r.Wins descending select r; foreach(Racer r in query) { Console.WriteLine("{0:A}", r); } return 0; } private static IEnumerable<Racer> GetRacersByCar(string car) { return from r in Formula1.GetRacers() from c in r.Cars where c == car select r; } public static void LinqQuery() { var query = from r in Formula1.GetRacers() where r.Country == "UK" orderby r.Wins descending select r; foreach(Racer r in query) { Console.WriteLine("{0:A}", r); } } } public static class StringExtension { public static string FirstName(this string name) { int ix = name.LastIndexOf(' '); return name.Substring(0, ix); } public static string LastName(this string name) { int ix = name.LastIndexOf(' '); return name.Substring(ix+1); } } [Serializable] public class RacerInfo { public int Year { get; set;} public int Position { get; set;} public string FirstName { get; set;} public string LastName { get; set;} } [Serializable] public class RacerTeamShip { public int Year{ get; set;} public string First { get; set;} public string Second { get; set;} public string Third { get; set;} } [Serializable] public class Racer : IComparable<Racer>, IFormattable { 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 IEnumerable<string> Cars { get; private set;} public IEnumerable<int> Years { get; private set;} public Racer(string firstName, string lastName, int wins, string country, int starts, IEnumerable<string> cars,IEnumerable<int> years) { this.FirstName = firstName; this.LastName = lastName; this.Wins = wins; this.Country = country; this.Starts = starts; this.Cars = new List<string>(cars); this.Years =new List<int>(years); } public Racer(string firstName, string lastName, int wins, string country, int starts): this(firstName, lastName, wins, country, starts, null, null) { } public override string ToString() { return string.Format("{0} {1}", FirstName, LastName); } public int CompareTo(Racer other) { if(other == null) return -1; return string.Compare(this.LastName, 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)); } } } [Serializable] public class Team { public string Name { get; private set;} public IEnumerable<int> Years { get; private set;} public Team(string name, params int[] years) { this.Name = name; this.Years = new List<int>(years); } } public static class Formula1 { private static List<Racer> racers; public static IList<Racer> GetRacers() { if(racers == null) { racers = new List<Racer>(40); racers.Add(new Racer("Nino","Farina", 33,"Italy", 5, new string[]{"Alfa Romeo", "Ferrari"}, new int[] { 1950 } )); racers.Add(new Racer("Juan Manuel","Fangio", 51,"Argentia", 24, new string[] {"Alfa Romeo", "Ferrari", "Mercedes", "Maserati"}, new int[]{ 1952, 1954, 1955, 1956, 1957 } )); racers.Add(new Racer("Alberto","Ascari", 32, "Italy", 10, new string[] {"Ferrari"}, new int[] { 1952, 1953 } )); racers.Add(new Racer("Mike","Hawthron", 45, "UK", 3, new string[] { "Ferrari"}, new int[] { 1961 } )); racers.Add(new Racer("Phil","Hill", 48,"USA", 3, new string[] { "Ferrari"}, new int[] { 1950 } )); racers.Add(new Racer("John","Surtees", 111,"UK", 6, new string[] { "Ferrari"}, new int[] { 1954 } )); racers.Add(new Racer("Jim","Clark", 72,"UK", 25, new string[] { "Lotus"}, new int[] { 1963, 1965 })); } return racers; } private static List<Team> teams; public static IList<Team> GetTeams() { if(teams == null) { teams = new List<Team>() { new Team("Vanwall", 1958), new Team("Cooper", 1959, 1956), new Team("Ferrai", 1961, 1964, 1975, 1976, 1977, 1979, 1982, 1983, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008), new Team("BRM", 1962) }; } return teams; } private static List<RacerTeamShip> racerTeamShips; public static IEnumerable<RacerTeamShip> GetRacerTeamShip() { if(racerTeamShips == null) { racerTeamShips = new List<RacerTeamShip>(); racerTeamShips.Add(new RacerTeamShip { Year = 1950, First = "Nino Farina", Second = "Juan Manuel Fangio", Third = "Liugi Fagioli" }); racerTeamShips.Add(new RacerTeamShip { Year = 1951, First = "Juan Manuel Fangio", Second = "Alberto Ascari", Third = "Froilan Gonzalez" }); } return racerTeamShips; } } }

    转载请注明原文地址: https://ju.6miu.com/read-5425.html

    最新回复(0)