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

C# List.Join方法

2014-08-13 十有三 1 浏览:20409 .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 获取及手动更新AntiForgeryToken防伪标记
  • ASP.NET MVC AJAX.BeginForm异步提交和刷新无效
  • ASP.NET MVC 统一化自定义异常处理方案的选择
  • 只允许一个 <configSections> 元素。它必须是根 <configuration> 元素的第一个子元素- HTTP Error 500.19
  • Web 部署任务失败 未能使用指定的进程“Web Management Service”连接到远程计算机
  • 发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0
发表评论
记住昵称

文章分类

.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系统 版本控制系统 插件工具 道学 佛经 服务器 搞笑娱乐 好文分享 软件应用 生活知识 诗词 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • 解决IE11安装升级失败和在安装前需要更新的问题
  • VS重构重命名的快捷键
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件

推荐文章

  • 龙游浅水遭虾戏,虎落平阳被犬欺出处
  • ASP.NET如何动态抛出指定状态代码的HTTP错误
  • VS(Visual Studio)按键失灵无法按回车
  • 解决Visual Studio快捷键Ctrl+Alt+L与QQ热键冲突
  • 发布BlogEngine.NET 3.3.5.0 出现 HTTP 错误 404.2 和404.0

最新评论

  • 能不能帮我一下QQ号是。2946145656
  • 非常感谢~帮大忙了
  • 我的版本没有这个选项,微软太霸道了
  • 我想请问一下,我用的也是iis跟url rewri
  • 不错,解决问题了. 不知道这个iis日志,能

友情链接

  • Passingwind的博客
  • 坤哥网
  • 码友网
  • Wil的博客

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