{"id":12940,"date":"2022-10-02T12:17:20","date_gmt":"2022-10-02T06:47:20","guid":{"rendered":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/"},"modified":"2022-10-02T12:17:20","modified_gmt":"2022-10-02T06:47:20","slug":"solved-full-outer-join-in-linq-optimized-for-unique-keys-closed","status":"publish","type":"post","link":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/","title":{"rendered":"[Solved] Full outer Join in LINQ optimized for unique keys [closed]"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div id=\"answer-52207928\" class=\"answer js-answer accepted-answer js-accepted-answer\" data-answerid=\"52207928\" data-parentid=\"52206904\" data-score=\"1\" data-position-on-page=\"1\" data-highest-scored=\"1\" data-question-has-accepted-highest-score=\"1\" itemprop=\"acceptedAnswer\" itemscope itemtype=\"https:\/\/schema.org\/Answer\">\n<div class=\"post-layout\">\n<div class=\"votecell post-layout--left\"><\/div>\n<div class=\"answercell post-layout--right\">\n<div class=\"s-prose js-post-body\" itemprop=\"text\">\n<p>Based on the referenced answer I tried something that doesn&#8217;t create <code>Lookup<\/code>&#8216;s but <code>Dictionary<\/code>&#8216;s instead.<\/p>\n<p>IMHO that&#8217;s the only thing you can cut that will actually save some time.<\/p>\n<p>Skipping creation of the <code>HashSet<\/code> (as proposed in my rushed comment) is not an option as this will lead to the duplication of all joined pairs.<\/p>\n<pre><code>public static class Extensions {\n    public static IEnumerable&lt;TResult&gt; FullOuterJoin&lt;TA, TB, TKey, TResult&gt;(\n        this IEnumerable&lt;TA&gt; a,\n        IEnumerable&lt;TB&gt; b,\n        Func&lt;TA, TKey&gt; selectKeyA,\n        Func&lt;TB, TKey&gt; selectKeyB,\n        Func&lt;TA, TB, TKey, TResult&gt; projection,\n        TA defaultA = default(TA),\n        TB defaultB = default(TB),\n        IEqualityComparer&lt;TKey&gt; cmp = null) {\n\n        cmp = cmp ?? EqualityComparer&lt;TKey&gt;.Default;\n        var adict = a.ToDictionary(selectKeyA, cmp);\n        var bdict = b.ToDictionary(selectKeyB, cmp);\n\n        var keys = new HashSet&lt;TKey&gt;(adict.Keys, cmp);\n        keys.UnionWith(bdict.Keys);\n\n        var join = from key in keys\n                   let xa = adict.GetOrDefault(key, defaultA)\n                   let xb = bdict.GetOrDefault(key, defaultB)\n                   select projection(xa, xb, key);\n\n        return join;\n    }\n\n    public static T GetOrDefault&lt;K, T&gt;(this IDictionary&lt;K, T&gt; d, K k, T def = default(T)) \n        =&gt; d.TryGetValue(k, out T value) ? value : def;\n}\n<\/code><\/pre>\n<\/p><\/div>\n<div class=\"mt24\"><\/div>\n<\/div>\n<p>            <span class=\"d-none\" itemprop=\"commentCount\">1<\/span> <\/p><\/div>\n<\/div>\n<p>[ad_2]<\/p>\n<p>solved Full outer Join in LINQ optimized for unique keys [closed] <\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Based on the referenced answer I tried something that doesn&#8217;t create Lookup&#8216;s but Dictionary&#8216;s instead. IMHO that&#8217;s the only thing you can cut that will actually save some time. Skipping creation of the HashSet (as proposed in my rushed comment) is not an option as this will lead to the duplication of all joined &#8230; <a title=\"[Solved] Full outer Join in LINQ optimized for unique keys [closed]\" class=\"read-more\" href=\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\" aria-label=\"More on [Solved] Full outer Join in LINQ optimized for unique keys [closed]\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[320],"tags":[324,578,325],"class_list":["post-12940","post","type-post","status-publish","format-standard","hentry","category-solved","tag-c","tag-linq","tag-performance"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb\" \/>\n<meta property=\"og:description\" content=\"[ad_1] Based on the referenced answer I tried something that doesn&#8217;t create Lookup&#8216;s but Dictionary&#8216;s instead. IMHO that&#8217;s the only thing you can cut that will actually save some time. Skipping creation of the HashSet (as proposed in my rushed comment) is not an option as this will lead to the duplication of all joined ... Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\" \/>\n<meta property=\"og:site_name\" content=\"JassWeb\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-02T06:47:20+00:00\" \/>\n<meta name=\"author\" content=\"Kirat\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kirat\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\"},\"author\":{\"name\":\"Kirat\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\"},\"headline\":\"[Solved] Full outer Join in LINQ optimized for unique keys [closed]\",\"datePublished\":\"2022-10-02T06:47:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\"},\"wordCount\":80,\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"keywords\":[\"c++\",\"linq\",\"performance\"],\"articleSection\":[\"Solved\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\",\"url\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\",\"name\":\"[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb\",\"isPartOf\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#website\"},\"datePublished\":\"2022-10-02T06:47:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/jassweb.com\/solved\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"[Solved] Full outer Join in LINQ optimized for unique keys [closed]\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/jassweb.com\/solved\/#website\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"name\":\"JassWeb\",\"description\":\"Build High-quality Websites\",\"publisher\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/jassweb.com\/solved\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/jassweb.com\/solved\/#organization\",\"name\":\"Jass Web\",\"url\":\"https:\/\/jassweb.com\/solved\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"contentUrl\":\"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png\",\"width\":693,\"height\":132,\"caption\":\"Jass Web\"},\"image\":{\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31\",\"name\":\"Kirat\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"contentUrl\":\"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750\",\"caption\":\"Kirat\"},\"sameAs\":[\"http:\/\/jassweb.com\"],\"url\":\"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/","og_locale":"en_US","og_type":"article","og_title":"[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb","og_description":"[ad_1] Based on the referenced answer I tried something that doesn&#8217;t create Lookup&#8216;s but Dictionary&#8216;s instead. IMHO that&#8217;s the only thing you can cut that will actually save some time. Skipping creation of the HashSet (as proposed in my rushed comment) is not an option as this will lead to the duplication of all joined ... Read more","og_url":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/","og_site_name":"JassWeb","article_published_time":"2022-10-02T06:47:20+00:00","author":"Kirat","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kirat","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#article","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/"},"author":{"name":"Kirat","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31"},"headline":"[Solved] Full outer Join in LINQ optimized for unique keys [closed]","datePublished":"2022-10-02T06:47:20+00:00","mainEntityOfPage":{"@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/"},"wordCount":80,"publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"keywords":["c++","linq","performance"],"articleSection":["Solved"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/","url":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/","name":"[Solved] Full outer Join in LINQ optimized for unique keys [closed] - JassWeb","isPartOf":{"@id":"https:\/\/jassweb.com\/solved\/#website"},"datePublished":"2022-10-02T06:47:20+00:00","breadcrumb":{"@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/jassweb.com\/solved\/solved-full-outer-join-in-linq-optimized-for-unique-keys-closed\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/jassweb.com\/solved\/"},{"@type":"ListItem","position":2,"name":"[Solved] Full outer Join in LINQ optimized for unique keys [closed]"}]},{"@type":"WebSite","@id":"https:\/\/jassweb.com\/solved\/#website","url":"https:\/\/jassweb.com\/solved\/","name":"JassWeb","description":"Build High-quality Websites","publisher":{"@id":"https:\/\/jassweb.com\/solved\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jassweb.com\/solved\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jassweb.com\/solved\/#organization","name":"Jass Web","url":"https:\/\/jassweb.com\/solved\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/","url":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","contentUrl":"https:\/\/jassweb.com\/wp-content\/uploads\/2021\/02\/jass-website-logo-1.png","width":693,"height":132,"caption":"Jass Web"},"image":{"@id":"https:\/\/jassweb.com\/solved\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/65c9c7b7958150c0dc8371fa35dd7c31","name":"Kirat","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jassweb.com\/solved\/#\/schema\/person\/image\/","url":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","contentUrl":"https:\/\/jassweb.com\/solved\/wp-content\/litespeed\/avatar\/1261af3c9451399fa1336d28b98ea3bb.jpg?ver=1775798750","caption":"Kirat"},"sameAs":["http:\/\/jassweb.com"],"url":"https:\/\/jassweb.com\/solved\/author\/jaspritsinghghumangmail-com\/"}]}},"_links":{"self":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12940","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/comments?post=12940"}],"version-history":[{"count":0,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/posts\/12940\/revisions"}],"wp:attachment":[{"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/media?parent=12940"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/categories?post=12940"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jassweb.com\/solved\/wp-json\/wp\/v2\/tags?post=12940"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}