-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
34 lines (33 loc) · 30.9 KB
/
index.html
File metadata and controls
34 lines (33 loc) · 30.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="color-scheme" content="light dark"/><meta name="viewport" content="width=device-width,initial-scale=1"/><title>ByteAether</title><meta name="description" content="Decoding complexity to craft beautiful simplicity."/><meta name="keywords" content="c#, csharp, dotnet, .net, byteaether, blog, tech, programming"/><meta name="author" content="Joonatan Uusväli"/><link rel="canonical" href="https://byteaether.github.io/"/><script type="application/ld+json">{
"@context": "https://schema.org",
"@type": "BlogPosting",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://byteaether.github.io/"
},
"headline": "ByteAether",
"description": "Decoding complexity to craft beautiful simplicity.",
"author": {
"@type": "Person",
"name": "Joonatan Uusväli"
},
"publisher": {
"@type": "Organization",
"name": "ByteAether",
"logo": {
"@type": "ImageObject",
"url": "https://byteaether.github.io/assets/icon.svg"
}
},
"datePublished": "2026-01-08",
"dateModified": "2026-01-08"
}</script><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon.svg" type="image/svg+xml"/><link rel="apple-touch-icon" href="/apple-touch-icon.png"/><link rel="manifest" href="/manifest.webmanifest"/><meta property="og:url" content="https://byteaether.github.io/"/><meta property="og:type" content="website"/><meta property="og:title" content="ByteAether"/><meta property="og:description" content="Decoding complexity to craft beautiful simplicity."/><meta property="og:image" content="https://byteaether.github.io/icon-512.png"/><meta property="og:image:type" content="image/png"/><meta property="og:image:width" content="512"/><meta property="twitter:card" content="summary_large_image"/><meta name="twitter:title" content="ByteAether"/><meta name="twitter:description" content="Decoding complexity to craft beautiful simplicity."/><meta name="twitter:image" content="https://byteaether.github.io/icon-512.png"/><meta name="robots" content="index, follow"/><link rel="alternate" href="https://byteaether.github.io/feed/feed.xml" type="application/atom+xml" title="ByteAether"/><meta name="format-detection" content="telephone=no"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta http-equiv="cache-control" content="public, max-age=86400, must-revalidate"/><meta name="generator" content="Eleventy v3.1.2"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-LEY00265EM"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-LEY00265EM")</script><link rel="stylesheet" href="/css/dnTXazc6iC.css"/><link rel="stylesheet" href="/css/ExYM2GrJrX.css"/><script type="text/javascript">const themeManager={init:function(){this.set(this.get())},toggle:function(){this.set("dark"==this.get()?"light":"dark")},set:function(e){document.documentElement.dataset.theme=e,localStorage.theme=e,this.updateGiscusTheme()},get:function(){return document.documentElement.dataset.theme??localStorage.theme??(window.matchMedia&&window.matchMedia("prefers-color-scheme: dark")?"dark":null)??"light"},updateGiscusTheme:function(){const e="dark"===themeManager.get()?"dark":"light",t=document.querySelector("iframe.giscus-frame");t&&t.contentWindow.postMessage({giscus:{setConfig:{theme:e}}},"https://giscus.app")}};themeManager.init()</script></head><body><header><div id="header-container"><a href="/" class="header-left"><img src="/assets/icon.svg" alt="Logo" class="logo-img"/> ByteAether</a><nav class="desktop-nav"><ul><li><a href="/" aria-current="page">Home</a></li><li><a href="/search/">Search</a></li><li><a href="/series/">Series</a></li><li><a href="/tags/">Tags</a></li><li><a href="/archive/">Archive</a></li><li><a href="/about/">About</a></li></ul></nav><div class="header-right"><a href="https://github.com/ByteAether" title="ByteAether" target="_blank"><svg class="icon" aria-hidden="true"><use href="#fab-fa-github" xlink:href="#fab-fa-github"></use></svg></a><a href="/feed/feed.xml" title="Feed" target="_blank"><svg class="icon" aria-hidden="true"><use href="#fas-fa-square-rss" xlink:href="#fas-fa-square-rss"></use></svg></a><span onclick="themeManager.toggle()"><svg class="icon" aria-hidden="true"><use href="#fas-fa-sun" xlink:href="#fas-fa-sun"></use></svg></span><label for="nav-toggle" class="burger-menu"><svg class="icon" aria-hidden="true"><use href="#fas-fa-bars" xlink:href="#fas-fa-bars"></use></svg></label></div><input type="checkbox" id="nav-toggle" class="nav-toggle"/><nav class="mobile-nav"><ul><li><a href="/" aria-current="page">Home</a></li><li><a href="/search/">Search</a></li><li><a href="/series/">Series</a></li><li><a href="/tags/">Tags</a></li><li><a href="/archive/">Archive</a></li><li><a href="/about/">About</a></li></ul></nav></div></header><div class="content-wrapper"><main id="skip" style="grid-area:main"><heading-anchors><a href="#skip" class="visually-hidden">Skip to main content</a><h1>Welcome to ByteAether!</h1><p>Step into <b>ByteAether</b>, where cutting-edge technology fuels intellectual discovery. This platform is dedicated to providing robust content on <b>.NET and C# development</b>, advanced <b>software engineering principles</b>, and the latest advancements from our <b>open-source initiatives</b>. ByteAether offers practical tools, discerning insights, and collaborative discussions, empowering developers from novice to expert.</p><p>Our content spans <b><a href="https://www.nuget.org/packages?q=ByteAether.*" target="_blank">NuGet package releases</a></b>, strategic approaches to complex technical challenges, and refined techniques to streamline your development workflow. To learn more about the expertise driving ByteAether, please visit the <a href="/about">About</a> section. We appreciate your visit and encourage you to explore, learn, and elevate your coding proficiency.</p><h1>Latest 8 Posts of 20</h1><div class="posts"><div class="box post-card"><h2><a href="/2026/the-weight-of-decisions-solving-weighted-random-sorting-at-scale/"><picture><source srcset="/2026/the-weight-of-decisions-solving-weighted-random-sorting-at-scale/FxpI67foge-600.avif" type="image/avif"/><source srcset="/2026/the-weight-of-decisions-solving-weighted-random-sorting-at-scale/FxpI67foge-600.webp" type="image/webp"/><img src="/2026/the-weight-of-decisions-solving-weighted-random-sorting-at-scale/FxpI67foge-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">The Weight of Decisions: Solving Weighted Random Sorting at Scale</div></a></h2><div class="excerpt">Several years ago at Microsoft, I worked on a back-end service responsible for routing high volumes of traffic. The service functioned as a traffic dispatcher: we received an incoming request, determined the most appropriate downstream destination, and forwarded the payload.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2026-01-07" data-pagefind-meta="Published" title="Published at 2026-01-07">2026-01-07</time> <span style="display:none" data-pagefind-filter="Year">2026</span></div><div data-words="926 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 5 minutes</div><div></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/algorithms/">Algorithms</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/performance/">Performance</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-automated-user-auditing-and-series-wrap-up/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-automated-user-auditing-and-series-wrap-up/gSf3EJ4tWD-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-automated-user-auditing-and-series-wrap-up/gSf3EJ4tWD-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-automated-user-auditing-and-series-wrap-up/gSf3EJ4tWD-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Automated User Auditing and Series Wrap-up</div></a></h2><div class="excerpt">Welcome to the seventh and final article in our series on building an enterprise-grade Data Access Layer (DAL) in C#. Over the last six posts, we have methodically built a robust, automated, and secure DAL using a database-first philosophy with C# and Linq2Db.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-12-01" data-pagefind-meta="Published" title="Published at 2025-12-01">2025-12-01</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,842 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 9 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-composable-row-level-security/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-composable-row-level-security/YC2FpKRHDy-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-composable-row-level-security/YC2FpKRHDy-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-composable-row-level-security/YC2FpKRHDy-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Composable Row-Level Security</div></a></h2><div class="excerpt">Welcome to the sixth post in our series on building a feature-rich, automated enterprise Data Access Layer (DAL) using C# and Linq2Db. In our previous articles, we established a powerful architectural pattern: a composable global query filter system. This system allows us to define cross-cutting concerns as simple interfaces, automatically combining and applying them to every relevant query.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-11-24" data-pagefind-meta="Published" title="Published at 2025-11-24, updated at 2025-12-08">2025-11-24</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,547 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 8 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/announcing-byteaetherulid-132-net-10-support-and-optimized-design/"><picture><source srcset="/2025/announcing-byteaetherulid-132-net-10-support-and-optimized-design/-LcfyDA7N--600.avif" type="image/avif"/><source srcset="/2025/announcing-byteaetherulid-132-net-10-support-and-optimized-design/-LcfyDA7N--600.webp" type="image/webp"/><img src="/2025/announcing-byteaetherulid-132-net-10-support-and-optimized-design/-LcfyDA7N--600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Announcing ByteAether.Ulid 1.3.2: .NET 10 Support and Optimized Design</div></a></h2><div class="excerpt">We are excited to announce the release of ByteAether.Ulid version 1.3.2, which is now available on NuGet. This release introduces official support and dedicated binaries for the new .NET 10 platform, continuing our mission to provide the most performant, secure, and specification-compliant ULID (Universally Unique Lexicographically Sortable Identifier) implementation for the .NET ecosystem.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-11-14" data-pagefind-meta="Published" title="Published at 2025-11-14">2025-11-14</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="852 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 4 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/byteaether-ulid/">ByteAether.Ulid</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/ulid/">ULID</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/uuid/">UUID</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/guid/">GUID</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/id/">ID</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/performance/">Performance</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/news/">News</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-composable-multi-tenancy-filtering/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-composable-multi-tenancy-filtering/Gmiysp6zSM-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-composable-multi-tenancy-filtering/Gmiysp6zSM-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-composable-multi-tenancy-filtering/Gmiysp6zSM-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Composable Multi-Tenancy Filtering</div></a></h2><div class="excerpt">In our previous articles, we established a robust foundation for our enterprise Data Access Layer (DAL). We began with a database-first approach using C# and Linq2Db, then implemented automated auditing for CreatedAt and ModifiedAt timestamps. Most recently, we engineered a powerful, composable global query filter system to handle soft-deletes transparently. This architecture was designed for extensibility, and in this post, we will leverage that investment to tackle one of the most critical ...</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-11-11" data-pagefind-meta="Published" title="Published at 2025-11-11, updated at 2025-12-08">2025-11-11</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,837 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 9 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-automated-soft-delete/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-automated-soft-delete/CYD28ybHtg-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-automated-soft-delete/CYD28ybHtg-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-automated-soft-delete/CYD28ybHtg-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Automated Soft-Delete</div></a></h2><div class="excerpt">Welcome to the fourth installment of our series on building a robust, enterprise-grade Data Access Layer (DAL) in C#. In our previous post, we established a powerful automated auditing system to track entity creation and modification times (CreatedAt/ModifiedAt). Now, we will tackle another critical enterprise requirement: soft-delete.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-11-04" data-pagefind-meta="Published" title="Published at 2025-11-04">2025-11-04</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,244 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 6 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-automated-auditing/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-automated-auditing/Pq7P6pc3rj-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-automated-auditing/Pq7P6pc3rj-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-automated-auditing/Pq7P6pc3rj-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Automated Auditing</div></a></h2><div class="excerpt">In our previous posts, we laid the foundation for our enterprise Data Access Layer (DAL). We established our core principles: a database-first philosophy, the use of C# and Linq2Db, and a commitment to automating cross-cutting concerns to enhance security and data integrity. We also structured our project, set up a scaffolding interceptor to enrich our auto-generated entities, and chose ULIDs as our primary keys for their performance benefits.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-10-24" data-pagefind-meta="Published" title="Published at 2025-10-24">2025-10-24</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,606 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 8 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div><div class="box post-card"><h2><a href="/2025/building-an-enterprise-data-access-layer-database-and-code-structure/"><picture><source srcset="/2025/building-an-enterprise-data-access-layer-database-and-code-structure/eIzAcxARpn-600.avif" type="image/avif"/><source srcset="/2025/building-an-enterprise-data-access-layer-database-and-code-structure/eIzAcxARpn-600.webp" type="image/webp"/><img src="/2025/building-an-enterprise-data-access-layer-database-and-code-structure/eIzAcxARpn-600.jpeg" alt="Illustration image for an article" class="banner" loading="lazy"/></picture><div class="title-text">Building an Enterprise Data Access Layer: Database and Code Structure</div></a></h2><div class="excerpt">Welcome back to our series on building a robust, enterprise-grade Data Access Layer (DAL) with C# and Linq2Db. In our previous post, we established the core principles and non-negotiable capabilities our DAL must possess, including automatic multi-tenancy filtering, soft-delete, and auditing. Now, we'll begin laying the foundation for this powerful system by defining the database schema and the initial code structure.</div><div class="post-metadata"><div><svg class="icon" aria-hidden="true"><use href="#far-fa-calendar" xlink:href="#far-fa-calendar"></use></svg> <time datetime="2025-10-07" data-pagefind-meta="Published" title="Published at 2025-10-07, updated at 2025-12-08">2025-10-07</time> <span style="display:none" data-pagefind-filter="Year">2025</span></div><div data-words="1,624 words"><svg class="icon" aria-hidden="true"><use href="#far-fa-clock" xlink:href="#far-fa-clock"></use></svg> 8 minutes</div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-rectangle-list" xlink:href="#fas-fa-rectangle-list"></use></svg> <span class="serie" data-pagefind-filter="Series"><a href="/series/enterprise-dal/">Enterprise DAL</a></span></div><div><svg class="icon" aria-hidden="true"><use href="#fas-fa-tags" xlink:href="#fas-fa-tags"></use></svg> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq2db/">Linq2Db</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/database/">Database</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/sql/">SQL</a></span> <span class="tag" data-pagefind-filter="Tags"><a href="/tags/linq/">LINQ</a></span></div></div></div></div><nav class="pagination"><ul><li><span><<</span></li><li><span><</span></li><li class="active"><a href="/">1</a></li><li class=""><a href="/page/2/">2</a></li><li class=""><a href="/page/3/">3</a></li><li><a href="/page/2/">></a></li><li><a href="/page/3/">>></a></li></ul></nav></heading-anchors></main><div class="bottom-content" style="grid-area:bottom"></div></div><footer><div class="footer-container"><div>ByteAether 2025</div><a href="https://github.com/ByteAether" title="ByteAether" target="_blank"><svg class="icon" aria-hidden="true"><use href="#fab-fa-github" xlink:href="#fab-fa-github"></use></svg></a><a href="/feed/feed.xml" title="Feed" target="_blank"><svg class="icon" aria-hidden="true"><use href="#fas-fa-square-rss" xlink:href="#fas-fa-square-rss"></use></svg></a><span onclick="themeManager.toggle()"><svg class="icon" aria-hidden="true"><use href="#fas-fa-sun" xlink:href="#fas-fa-sun"></use></svg></span></div></footer><svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" id="fab-fa-github"><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fas" data-icon="square-rss" class="svg-inline--fa fa-square-rss" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="fas-fa-square-rss"><path fill="currentColor" d="M64 32C28.7 32 0 60.7 0 96L0 416c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-320c0-35.3-28.7-64-64-64L64 32zM96 136c0-13.3 10.7-24 24-24c137 0 248 111 248 248c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200c-13.3 0-24-10.7-24-24zm0 96c0-13.3 10.7-24 24-24c83.9 0 152 68.1 152 152c0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104c-13.3 0-24-10.7-24-24zm0 120a32 32 0 1 1 64 0 32 32 0 1 1 -64 0z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fas" data-icon="sun" class="svg-inline--fa fa-sun" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="fas-fa-sun"><path fill="currentColor" d="M361.5 1.2c5 2.1 8.6 6.6 9.6 11.9L391 121l107.9 19.8c5.3 1 9.8 4.6 11.9 9.6s1.5 10.7-1.6 15.2L446.9 256l62.3 90.3c3.1 4.5 3.7 10.2 1.6 15.2s-6.6 8.6-11.9 9.6L391 391 371.1 498.9c-1 5.3-4.6 9.8-9.6 11.9s-10.7 1.5-15.2-1.6L256 446.9l-90.3 62.3c-4.5 3.1-10.2 3.7-15.2 1.6s-8.6-6.6-9.6-11.9L121 391 13.1 371.1c-5.3-1-9.8-4.6-11.9-9.6s-1.5-10.7 1.6-15.2L65.1 256 2.8 165.7c-3.1-4.5-3.7-10.2-1.6-15.2s6.6-8.6 11.9-9.6L121 121 140.9 13.1c1-5.3 4.6-9.8 9.6-11.9s10.7-1.5 15.2 1.6L256 65.1 346.3 2.8c4.5-3.1 10.2-3.7 15.2-1.6zM160 256a96 96 0 1 1 192 0 96 96 0 1 1 -192 0zm224 0a128 128 0 1 0 -256 0 128 128 0 1 0 256 0z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fas" data-icon="bars" class="svg-inline--fa fa-bars" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="fas-fa-bars"><path fill="currentColor" d="M0 96C0 78.3 14.3 64 32 64l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 128C14.3 128 0 113.7 0 96zM0 256c0-17.7 14.3-32 32-32l384 0c17.7 0 32 14.3 32 32s-14.3 32-32 32L32 288c-17.7 0-32-14.3-32-32zM448 416c0 17.7-14.3 32-32 32L32 448c-17.7 0-32-14.3-32-32s14.3-32 32-32l384 0c17.7 0 32 14.3 32 32z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="far" data-icon="calendar" class="svg-inline--fa fa-calendar" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" id="far-fa-calendar"><path fill="currentColor" d="M152 24c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L64 64C28.7 64 0 92.7 0 128l0 16 0 48L0 448c0 35.3 28.7 64 64 64l320 0c35.3 0 64-28.7 64-64l0-256 0-48 0-16c0-35.3-28.7-64-64-64l-40 0 0-40c0-13.3-10.7-24-24-24s-24 10.7-24 24l0 40L152 64l0-40zM48 192l352 0 0 256c0 8.8-7.2 16-16 16L64 464c-8.8 0-16-7.2-16-16l0-256z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="far" data-icon="clock" class="svg-inline--fa fa-clock" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="far-fa-clock"><path fill="currentColor" d="M464 256A208 208 0 1 1 48 256a208 208 0 1 1 416 0zM0 256a256 256 0 1 0 512 0A256 256 0 1 0 0 256zM232 120l0 136c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2 280 120c0-13.3-10.7-24-24-24s-24 10.7-24 24z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fas" data-icon="tags" class="svg-inline--fa fa-tags" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" id="fas-fa-tags"><path fill="currentColor" d="M345 39.1L472.8 168.4c52.4 53 52.4 138.2 0 191.2L360.8 472.9c-9.3 9.4-24.5 9.5-33.9 .2s-9.5-24.5-.2-33.9L438.6 325.9c33.9-34.3 33.9-89.4 0-123.7L310.9 72.9c-9.3-9.4-9.2-24.6 .2-33.9s24.6-9.2 33.9 .2zM0 229.5L0 80C0 53.5 21.5 32 48 32l149.5 0c17 0 33.3 6.7 45.3 18.7l168 168c25 25 25 65.5 0 90.5L277.3 442.7c-25 25-65.5 25-90.5 0l-168-168C6.7 262.7 0 246.5 0 229.5zM144 144a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"></path></symbol></svg>
<svg style="display: none;"><symbol aria-hidden="true" focusable="false" data-prefix="fas" data-icon="rectangle-list" class="svg-inline--fa fa-rectangle-list" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" id="fas-fa-rectangle-list"><path fill="currentColor" d="M0 96C0 60.7 28.7 32 64 32l448 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM128 288a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm32-128a32 32 0 1 0 -64 0 32 32 0 1 0 64 0zM128 384a32 32 0 1 0 0-64 32 32 0 1 0 0 64zm96-248c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0zm0 96c-13.3 0-24 10.7-24 24s10.7 24 24 24l224 0c13.3 0 24-10.7 24-24s-10.7-24-24-24l-224 0z"></path></symbol></svg><script defer="" type="module" src="/js/ovU2bMHLr3.js"></script>
<!-- This page `https://byteaether.github.io/` was built on 2026-01-08 12:26:40 -->
</body></html>