C#学习日记 LINQ语句

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

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;
			}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值