• [C#] LINQ之SelectMany和GroupJoin


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication1
    {
        class Person
        {
            public int CityID { set; get; }
            public string Name { set; get; }
        }
    
        class City
        {
            public int ID { set; get; }
            public string CityName { set; get; }
        }
    
    
        public class Program
        {
            public static void Main(string[] args)
            {
                Person[] persons = new Person[]
                {
                    new Person {CityID = 1, Name = "ABC"},
                    new Person {CityID = 1, Name = "EFG"},
                    new Person {CityID = 2, Name = "HIJ"},
                    new Person {CityID = 3, Name = "KLM"},
                    new Person {CityID = 3, Name = "NOP"},
                    new Person {CityID = 4, Name = "QRS"},
                    new Person {CityID = 5, Name = "TUV"}
                };
                City[] cities = new City[]
                {
                    new City {ID = 1, CityName = "Guangzhou"},
                    new City {ID = 2, CityName = "Shenzhen"},
                    new City {ID = 3, CityName = "Beijing"},
                    new City {ID = 4, CityName = "Shanghai"}
                };
    
                //例子1:内联
                var result0 = from p in persons
                    join c in cities
                        on p.CityID equals c.ID
                    select new {PersonName = p.Name, Citys = c.CityName};
                Console.Write("-----inner join linq--------");
                Console.WriteLine();
                foreach (var item in result0)
                {
                    Console.Write(item.PersonName);
                    Console.Write(":");
                    Console.Write(item.Citys);
                    Console.WriteLine();
                }
    
                Console.WriteLine();
    
                //例子2:左联 linq ,这里使用了into,如果cities在persons没有匹配的项,则返回Citys是null,返回的Citys是list
                var result01 = from p in persons
                      join c in cities on p.CityID equals c.ID into cs
                      select new { PersonName = p.Name, Citys = cs };
                Console.Write("------left join linq  list-------");
                Console.WriteLine();
                foreach (var item in result01)
                {
                    Console.Write(item.PersonName);
                    Console.Write(":");
                    foreach (var city in item.Citys)
                    {
                        Console.Write(city.CityName);
                    }
                    Console.WriteLine();
                }
    
                //例子3:左联 linq,这里使用了into,并且多了from t2 in cs.DefaultIfEmpty(),
    //然后在返回的时候Citys进行了为null判断,不然result是没有内容的
    var result = from p in persons join c in cities on p.CityID equals c.ID into cs from t2 in cs.DefaultIfEmpty() select new {PersonName = p.Name, Citys = t2 == null ? "" : t2.CityName}; Console.Write("------left join linq-------"); Console.WriteLine(); foreach (var item in result) { Console.Write(item.PersonName); Console.Write(":"); Console.Write(item.Citys); Console.WriteLine(); } Console.WriteLine(); //例子4(和例子2是同样的效果):左连 lamda 返回的Citys是list var result2 = persons.GroupJoin(cities, p => p.CityID, c => c.ID, (p, cs) => new {PersonName = p.Name, Citys = cs}); Console.Write("------left join lamda GroupJoin list-------"); Console.WriteLine(); foreach (var item in result2) { Console.Write(item.PersonName); Console.Write(":"); foreach (var city in item.Citys) { Console.Write(city.CityName); } Console.WriteLine(); } Console.WriteLine(); //例子5(和例子3是同样的效果):左连 lamda var result3 = persons.GroupJoin(cities, p => p.CityID, c => c.ID, (p, cs) => new {p, cs}) .SelectMany(p2 => p2.cs.DefaultIfEmpty(), (p2, s2) => new {PersonName = p2.p.Name, Citys = s2 == null ? "" : s2.CityName}); Console.Write("------left join lamda GroupJoin DefaultIfEmpty--2-----"); Console.WriteLine(); foreach (var item in result3) { Console.Write(item.PersonName); Console.Write(":"); Console.Write(item.Citys); Console.WriteLine(); } Console.WriteLine();
    Console.ReadKey(); } } }

  • 相关阅读:
    配置Nginx和Apache允许指定域名CORS跨域访问
    当遇到npm ERR! Unexpected end of JSON input while parsing near……时的解决办法
    基于thinkphp开发的项目部署到由宝塔面板创建的LNMP服务器上解决路径出错问题
    在ThinkPHP框架(5.0.24)下引入Ueditor并实现向七牛云对象存储上传图片同时将图片信息保存到MySQL数据库,同时实现lazyload懒加载
    为Sublime Text 3设置优雅的字体
    windows7x64系统中配置mysql5.7.17为本地开发环境(win2008类似)
    SQL Server实现数据的递归查询
    在.net程序中使用System.Net.Mail来发送邮件
    在 Ubuntu 13.10 中搭建Java开发环境
    Windows 系统下载安装 ZooKeeper
  • 原文地址:https://www.cnblogs.com/wybin6412/p/11464829.html
Copyright © 2020-2023  润新知