LINQ相关的集合操作
来源:互联网 发布:python绝技 pdf 编辑:程序博客网 时间:2024/06/05 12:00
摘选自C#高级编程(第9版) --C# 5.0 & .NET 4.5.1
Code:
static void Main(string[] args) { LinqQuery(); object[] data = { "one", 2, 3, "four", "five", 6 }; var q = data.OfType<string>();//OfType使用 //多个from,实际是转为SelectMany()扩展方法 var ferraiDrivers = from r in Formula1.GetChampions() from c in r.Cars where c == "Ferrari" orderby r.LastName select r.FirstName + " " + r.LastName; //对应扩展方法为 var ferraiDrivers2 = Formula1.GetChampions() .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); foreach (var s in ferraiDrivers) Console.WriteLine(s); //join var racersAndTeams = (from r in from r1 in Formula1.GetChampions() from yr in r1.Years select new { Year = yr, Name = r1.FirstName + " " + r1.LastName } join t in from t1 in Formula1.GetContructorChampions() from yt in t1.Years select new { Year = yt, Name = t1.Name } on r.Year equals t.Year orderby t.Year select new { Year = r.Year, Racer = r.Name, Team = t.Name }).Take(10); foreach (var item in racersAndTeams) { Console.WriteLine("{0}: {1,-20} {2}", item.Year, item.Racer, item.Team); } //Intersect操作 Func<string, IEnumerable<Racer>> racersByCar = car => from r in Formula1.GetChampions() from c in r.Cars where c == car orderby r.LastName select r; Console.WriteLine("World champion with Ferrari and McLaren"); foreach (var racer in racersByCar("Ferrari").Intersect(racersByCar("McLaren"))) { Console.WriteLine(racer); } //Zip(合并) Console.WriteLine("Zip:"); var racerNames = from r in Formula1.GetChampions() where r.Country == "Itally" orderby r.Wins descending select new { Name = r.FirstName + " " + r.LastName }; var racerNamesAndStarts = from r in Formula1.GetChampions() where r.Country == "Itally" orderby r.Wins descending select new { LastName = r.LastName, Starts = r.Starts }; var racers = racerNames.Zip(racerNamesAndStarts, (a, b) => a.Name + ",Starts:" + b.Starts); foreach (var r in racers) Console.WriteLine(r); //count sum var query = from r in Formula1.GetChampions() let nYears = r.Years.Count() where nYears >= 3 orderby nYears descending, r.LastName select new { Name = r.FirstName + " " + r.LastName, TimesChampion = nYears }; foreach (var r in query) Console.WriteLine("{0} {1}", r.Name, r.TimesChampion); var countries = (from c in from r in Formula1.GetChampions() group r by r.Country into c select new { Country = c.Key, Wins = (from r1 in c select r1.Wins).Sum() } orderby c.Wins descending, c.Country select c).Take(5); foreach (var c in countries) Console.WriteLine("{0} {1}", c.Country, c.Wins); //非类型化的集合操作 var l = new ArrayList(Formula1.GetChampions() as ICollection); var query1 = from r in l.Cast<Racer>() where r.Country == "USA" orderby r.Wins descending select r; foreach (var r in query1) Console.WriteLine("{0:A}", r); Console.ReadKey(); }
private static void LinqQuery() { var q = from r in Formula1.GetChampions() where r.Country == "Brazil" orderby r.Wins descending select r; //使用扩展方法 var racers = Formula1.GetChampions() .Where((r, index) => r.LastName.StartsWith("A") && index % 2 != 0); foreach (Racer r in racers) { Console.WriteLine("{0:A}", r); } }
0 0
- LINQ相关的集合操作
- 集合的相关操作
- Linq操作集合数组
- LINQ集合操作
- Map集合的相关操作
- Linq 学习(5) 集合操作
- 整理的LINQ TO XXX的相关操作,关联处理
- 浅谈java集合类型的相关操作
- virtualbox相关操作集合
- Java集合相关操作
- LINQ系列:Linq to Object集合操作符
- 关于List集合使用 Linq 操作问题
- LinQ的级联操作
- Linq的Set操作
- XML的LINQ操作
- linq 的简单操作
- linq 的简单操作
- Linq的基本操作
- Java学习篇之IO流复制方式效率大比拼
- 机器学习 推荐系统
- server
- Maven加速下载
- 实现Label文本内容中电话号码特殊颜色显示并点击电话号码能拨打
- LINQ相关的集合操作
- 【UESTC】1426 - A Rational Sequence (递归)
- jQuery复选框全部选中和全部不选择
- 我走过最长的路就是你的套路——深圳
- Java设计模式Proxy之动态代理
- 针对文件流的几个常见函数
- Oracle12c 通过用户界面创建PDB(Windows平台)
- 区块链学习资源汇总
- zookeeper入门之Curator的使用之几种监听器的使用