/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

C# List.Join方法

2014-08-13 十有三 1 浏览:16726 .NET技术 C#

最近在研究C#泛型集合的时候发现了List.Join方法,这个方法与C#中的string.Join方法还有js中的join方法不一样,不是根据分隔符链接字符串,而是根据两个对象关联起来生成新的数据。

List.Join方法更像SQL 中的JOIN连接,该方法是根据两个泛型集合之间的关系,将这两个集合合并后获取新的集合。而SQL的JOIN 则是根据两个或多个表中的列之间的关系,从这些表中查询数据。(PS:具体可以参考微软官方MSDN的说明)

这是整理后的官方范例代码(代码在控制台应用程序中运行):

    /*宠物主人*/
    class Person
    {
        public string Name { get; set; }
    }
    /*宠物*/
    class Pet
    {
        public string Name { get; set; }
        public Person Owner { get; set; }
    }
    static void Main(string[] args)
    {
        /*宠物主人*/
        Person magnus = new Person { Name = "Hedlund, Magnus" };
        Person terry = new Person { Name = "Adams, Terry" };
        Person charlotte = new Person { Name = "Weiss, Charlotte" };

        /*宠物*/
        Pet barley = new Pet { Name = "Barley", Owner = terry };
        Pet boots = new Pet { Name = "Boots", Owner = terry };
        Pet whiskers = new Pet { Name = "Whiskers", Owner = charlotte };
        Pet daisy = new Pet { Name = "Daisy", Owner = magnus };

        /*宠物主人列表集合*/
        List<Person> people = new List<Person> { magnus, terry, charlotte };
        /*宠物列表集合*/
        List<Pet> pets = new List<Pet> { barley, boots, whiskers, daisy };

        /*          
         * Create a list of Person-Pet pairs where 
         * each element is an anonymous type that contains a
         * Pet's name and the name of the Person that owns the Pet.
         * 创建一个包含 "主人-宠物" 这样对应对象的列表
         * ,其中每个对象元素都是包含宠物名字和宠物主人名字的匿名类型
        */            
        var query = people.Join(pets, person => person, pet => pet.Owner
        , (person, pet) => new { OwnerName = person.Name, Pet = pet.Name });

        /*循环输出最终结果 格式:宠物主人名-宠物名*/
        foreach (var obj in query)
        {
            Console.WriteLine("{0} - {1}", obj.OwnerName, obj.Pet);
        }

        Console.ReadKey();
    }

最终控制台输出的结果如下:

输出结果

下面使用SQL语句JOIN连接查询,从而模拟出List.Join方法的同等效果,其中有Person和Pet这两张表,根据Pet宠物表的PID关联Person宠物主人表的ID。

Person表数据如下:

id Name
1 Hedlund, Magnus
2 Adams, Terry
3 Weiss, Charlotte

Pet表数据如下:

id Name pid
1 Daisy 1
2 Barley 2
3 Boots 2
4 Whiskers 3

查询语句如下:

SELECT P.Name+' - '+PT.Name AS '宠物主人 - 宠物名称'
FROM Person AS P JOIN Pet AS PT 
ON P.Id=PT.PID

查询结果如下:

宠物主人 - 宠物名称
Hedlund, Magnus - Daisy
Adams, Terry - Barley
Adams, Terry - Boots
Weiss, Charlotte - Whiskers

最终结果和上面使用List.Join方法获取的一模一样吧。


作者:十有三

出处:https://shiyousan.com/post/635434860251469582

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: jquery ajax error函数和及其参数详细说明
  • 下一篇: JSON劫持漏洞(详细讲解利用JSON从而进行数据劫持的漏洞攻防策略)

相关文章
  • ASP.NET MVC 出现“System.Web.Mvc.CompareAttribute”已过时
  • 从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
  • ASP.NET MVC移除URL后面自动加上的AspxAutoDetectCookieSupport=1
  • C# List.Join方法
  • ASP.NET MVC 统一化自定义异常处理方案的选择
  • C#解决IIS域名批量绑定
发表评论
记住昵称

文章分类

.NET技术 122 数据库 24 Web前端 21 网站建设运维 33 操作系统与应用 67 程序猿日常 11 开发工具 11 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 道学 佛经 服务器 搞笑娱乐 好文分享 软件应用 生活知识 诗词 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • VS重构重命名的快捷键
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • jquery ajax error函数和及其参数详细说明
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网

推荐文章

  • 使用JavaScript ceil()函数计算分页页码总数
  • 详解IIS中URL重写工具的匹配URL-规则模式(rule patterns)
  • javascript 实现函数/方法重载效果
  • Win10更新后右键开始菜单的控制面板不见了
  • OneNote如何取消共享笔记和删除邀请的用户

最新评论

  • 谢谢了。第一次遇到,以前怎么不会出现这种情况呢,奇
  • 第一种方法解决问题。在开始菜单里重置为默认的推荐浏
  • 使用百度分享按钮动态分享的时候永远默认分享最后一条
  • 使用百度分享按钮动态分享的时候永远默认分享最后一条
  • 非常感谢

友情链接

  • Wil的博客
  • Passingwind的博客
  • 坤哥网
  • .NET开发者社区

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号