{"id":29669989,"url":"https://github.com/dbexpression-team/dbexpression","last_synced_at":"2025-07-22T19:05:56.889Z","repository":{"id":37893546,"uuid":"119781514","full_name":"dbExpression-team/dbExpression","owner":"dbExpression-team","description":"dbExpression is a Microsoft SQL Server database connector that enables fluent composition and execution of type safe SQL queries directly within compiled code.","archived":false,"fork":false,"pushed_at":"2024-04-03T14:55:43.000Z","size":26678,"stargazers_count":8,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-11-17T04:15:08.088Z","etag":null,"topics":["microsoft","sqlserver"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dbExpression-team.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-01T04:12:51.000Z","updated_at":"2024-04-27T06:01:42.000Z","dependencies_parsed_at":"2024-11-17T04:15:15.779Z","dependency_job_id":"97f08874-45f1-4857-96f9-9813332d768a","html_url":"https://github.com/dbExpression-team/dbExpression","commit_stats":null,"previous_names":["dbexpression-team/dbexpression","hattricklabs/db-ex"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/dbExpression-team/dbExpression","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbExpression-team%2FdbExpression","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbExpression-team%2FdbExpression/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbExpression-team%2FdbExpression/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbExpression-team%2FdbExpression/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dbExpression-team","download_url":"https://codeload.github.com/dbExpression-team/dbExpression/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dbExpression-team%2FdbExpression/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266443502,"owners_count":23929463,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["microsoft","sqlserver"],"created_at":"2025-07-22T19:05:55.982Z","updated_at":"2025-07-22T19:05:56.874Z","avatar_url":"https://github.com/dbExpression-team.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![dbExpression](https://dbexpressionpublic.blob.core.windows.net/web/dbex-logo.png)\n\n# Microsoft SQL Server. Simplified.\n\ndbExpression is a Microsoft SQL Server database connector that enables fluent composition and execution of type safe SQL queries directly within compiled code.\n\n**dbExpression supports Microsoft SQL Server versions 2005+.**\n\nThe docs can be found at [dbexpression.com/docs](https://dbexpression.com/docs).  \n\n## Build Status\n\n[![Build Status](https://dev.azure.com/dbexpression-team/dbexpression/_apis/build/status/dbexpression-team.dbexpression?branchName=main)](https://dev.azure.com/dbexpression-team/dbexpression/_build/latest?definitionId=1\u0026branchName=main)\n\nUsing linux versions of Microsoft SQL Server on Docker images, integration tests are executed against the following versions:\n\n| Platform            \t| Status \t\t\t\t\t|\n| :---------------------| :---------------------------------------------|\n|\tMSSQL 2017\t|\t[![Build Status](https://dev.azure.com/dbExpression-team/dbexpression/_apis/build/status/dbexpression-team.dbexpression?branchName=main\u0026stageName=Test%20MSSQL%20Platforms\u0026jobName=MSSQL2017%20-%20net8)](https://dev.azure.com/dbexpression-team/dbexpression/_build/latest?definitionId=1\u0026branchName=main)\t|\n|\tMSSQL 2019\t|\t[![Build Status](https://dev.azure.com/dbExpression-team/dbexpression/_apis/build/status/dbexpression-team.dbexpression?branchName=main\u0026stageName=Test%20MSSQL%20Platforms\u0026jobName=MSSQL2019%20-%20net8)](https://dev.azure.com/dbexpression-team/dbexpression/_build/latest?definitionId=1\u0026branchName=main)\t|\n|\tMSSQL 2022\t|\t[![Build Status](https://dev.azure.com/dbExpression-team/dbexpression/_apis/build/status/dbexpression-team.dbexpression?branchName=main\u0026stageName=Test%20MSSQL%20Platforms\u0026jobName=MSSQL2022%20-%20net8)](https://dev.azure.com/dbexpression-team/dbexpression/_build/latest?definitionId=1\u0026branchName=main)\t|\n\n## Get dbExpression\n\n| Package            \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t|  \t\t\t\t\t\t\t\t\t\t\t\t|\n| :-----------------------------------------------------------------------------| :---------------------------------------------------------------------------------------------|\n| [DbExpression.MsSql](https://www.nuget.org/packages/DbExpression.MsSql/)\t\t| ![Nuget](https://img.shields.io/nuget/v/DbExpression.MsSql)\t\t\t\t\t|\n| [DbExpression.Tools](https://www.nuget.org/packages/DbExpression.Tools/)\t\t| ![Nuget](https://img.shields.io/nuget/v/DbExpression.Tools)\t\t\t\t\t|\n| [DbExpression.MsSql.Extensions.DependencyInjection](https://www.nuget.org/packages/DbExpression.MsSql.Extensions.DependencyInjection/)\t| ![Nuget](https://img.shields.io/nuget/v/DbExpression.MsSql.Extensions.DependencyInjection)\t|\n   DbExpression\n## Why dbExpression?\n\ndbExpression was created to close the gap between application code and raw SQL, bringing Microsoft SQL Server functionality into .NET.  dbExpression isn't centered around object relational mapping (ORM) concepts, but instead focuses on allowing you to write powerful type-checked SQL queries comparable to queries written directly in TSQL.\n\n* **Extensible by design**\n* **Fluent** query builder using natural SQL syntax\n* **WYSIWYG** - What you write looks like SQL, what we execute looks like SQL\n* **Compile-time checking** of SQL queries\n* Build queries **without magic strings** or string interpolation\n* Tooling to easily keep **application code in sync with database schema**\n* **ORM features without the ORM handcuffs**\n\nWith dbExpression, the code that handles the basics of pushing and pulling data in and out of your database is generated via a CLI tool.  The code contains all of the classes and functional plumbing necessary to insert, update, delete and query your data with expressions that live directly within your application code.  When you modify your database in any way, regenerating the code exposes those changes to your application, keeping schema changes in sync with your application code.\n\nWith dbExpression, you can easily write queries in code like this:\n```c#\n//query composed and compiled in c#\n\nIList\u003cdynamic\u003e purchases_shipped_by_year = await db.SelectMany(\n        dbo.Person.Id,\n        (dbo.Person.FirstName + \" \" + dbo.Person.LastName).As(\"CustomerName\"),\n        db.fx.Count(dbo.Purchase.ShipDate).As(\"ShippedCount\"),\n        db.fx.DatePart(DateParts.Year, dbo.Purchase.ShipDate).As(\"ShippedYear\")\n    )\n    .From(dbo.Purchase)\n    .InnerJoin(dbo.Person).On(dbo.Purchase.PersonId == dbo.Person.Id)\n    .Where(dbo.Purchase.ShipDate != dbex.Null)\n    .GroupBy(\n        dbo.Person.Id,\n        dbo.Person.FirstName,\n        dbo.Person.LastName,\n        db.fx.DatePart(DateParts.Year, dbo.Purchase.ShipDate)\n    )\n    .ExecuteAsync();\n```\nAnd here's the SQL statement dbExpression assembled and executed against the database:\n```sql\nexec sp_executesql N'SELECT\n\t[t0].[Id],\n\t([t0].[FirstName] + @P1 + [t0].[LastName]) AS [CustomerName],\n\tCOUNT([t1].[ShipDate]) AS [ShippedCount],\n\tDATEPART(year, [t1].[ShipDate]) AS [ShippedYear]\nFROM\n\t[dbo].[Purchase] AS [t1]\n\tINNER JOIN [dbo].[Person] AS [t0] ON [t1].[PersonId] = [t0].[Id]\nWHERE\n\t[t1].[ShipDate] IS NOT NULL\nGROUP BY\n\t[t0].[Id],\n\t[t0].[FirstName],\n\t[t0].[LastName],\n\tDATEPART(year, [t1].[ShipDate]);',N'@P1 varchar(1)',@P1=' '\n```\n\ndbExpression was designed to work statically or with dependency injection.  The decision for which to use is typically based on the type of project, \nthe team environment, and just what works best for you - it's your choice!\n* Statically using a static database accessor to fluently build and execute queries.  This is great for environments or projects where this works best.\n* Instance based via dependency injection where an instance of the database accessor is used to fluently build and execute queries.  Perfect for environments that use dependency injection.\n\n## Use dbExpression\n\ndbExpression is quick and easy to get up and running using two packages available on NuGet:\n1) [dbExpression Microsoft SQL Server package](https://www.nuget.org/packages/DbExpression.MsSql/)\n2) [dbExpression dotnet CLI tool](https://www.nuget.org/packages/DbExpression.Tools/)\n\nJump to the [docs](https://dbexpression.com/docs) for installation and configuration instructions and how to author and execute beautiful queries.\n\n## Performance\n\nThe following shows how we're doing compared to [EF Core](https://github.com/dotnet/efcore) and [Dapper](https://github.com/DapperLib/Dapper).  The benchmarks\nused are included in the [Benchmark.MsSql](https://github.com/dbexpression-team/dbexpression/tree/master/benchmark/Benchmark.MsSql) project.\n\nOutput from the latest:\n\n``` ini\n\nBenchmarkDotNet v0.13.12, Windows 11 (10.0.22000.2538/21H2/SunValley)\nIntel Core i9-9980HK CPU 2.40GHz, 1 CPU, 8 logical and 8 physical cores\n.NET SDK 8.0.202\n  [Host]   : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n  ShortRun : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n\n\n```\n| ORM          | Method                                                       | Return               | Mean       | StdDev   | Error    | Rank | Gen0   | Gen1   | Gen2   | Allocated |\n|------------- |------------------------------------------------------------- |--------------------- |-----------:|---------:|---------:|-----:|-------:|-------:|-------:|----------:|\n| **dbExpression** | **\u0026#39;Select First Record\u0026#39;**                                        | **Person**               |   **434.3 μs** | **25.24 μs** | **38.16 μs** |    **8** | **1.0000** |      **-** |      **-** |   **9.86 KB** |\n| **dbExpression** | **\u0026#39;Select First With Dynamic Return (aliased columns)\u0026#39;**         | **dynamic**              |   **231.9 μs** |  **3.31 μs** |  **5.56 μs** |    **1** | **0.5000** |      **-** |      **-** |   **7.05 KB** |\n| **dbExpression** | **\u0026#39;Select First With Dynamic Return Async (aliased columns)\u0026#39;**   | **Task\u0026lt;dynamic\u0026gt;**        |   **342.0 μs** |  **1.57 μs** |  **2.64 μs** |    **5** | **1.0000** |      **-** |      **-** |   **9.19 KB** |\n| **dbExpression** | **\u0026#39;Select First With Dynamic Return Async\u0026#39;**                     | **Task\u0026lt;dynamic\u0026gt;**        |   **324.6 μs** |  **4.41 μs** |  **7.41 μs** |    **4** | **1.0000** |      **-** |      **-** |   **9.29 KB** |\n| **dbExpression** | **\u0026#39;Select First With Dynamic Return\u0026#39;**                           | **dynamic**              |   **273.3 μs** | **10.50 μs** | **15.88 μs** |    **2** | **0.5000** |      **-** |      **-** |   **7.15 KB** |\n| **dbExpression** | **\u0026#39;Select First With Entity Return Async\u0026#39;**                      | **Task\u0026lt;Person\u0026gt;**         |   **367.5 μs** |  **4.40 μs** |  **6.66 μs** |    **6** | **1.0000** |      **-** |      **-** |  **12.01 KB** |\n| **dbExpression** | **\u0026#39;Select First With Join Condition With Entity Return Async\u0026#39;**  | **Task\u0026lt;Person\u0026gt;**         |   **380.7 μs** | **12.27 μs** | **18.55 μs** |    **7** | **1.0000** |      **-** |      **-** |   **12.5 KB** |\n| **dbExpression** | **\u0026#39;Select First With Join Condition\u0026#39;**                           | **Person**               |   **491.4 μs** | **30.05 μs** | **45.43 μs** |    **8** | **1.0000** |      **-** |      **-** |  **10.35 KB** |\n| **dbExpression** | **\u0026#39;Select First With Scalar Return Async\u0026#39;**                      | **Task\u0026lt;Int32\u0026gt;**          |   **307.2 μs** | **10.38 μs** | **15.69 μs** |    **3** | **0.5000** |      **-** |      **-** |   **6.56 KB** |\n| **dbExpression** | **\u0026#39;Select First With Scalar Return\u0026#39;**                            | **Int32**                |   **299.9 μs** |  **9.38 μs** | **14.18 μs** |    **3** | **0.5000** |      **-** |      **-** |   **4.51 KB** |\n| **dbExpression** | **\u0026#39;Select First With Where Clause With Entity Return Async\u0026#39;**    | **Task\u0026lt;Person\u0026gt;**         |   **366.2 μs** |  **6.00 μs** | **11.48 μs** |    **6** | **1.0000** |      **-** |      **-** |  **13.53 KB** |\n| **dbExpression** | **\u0026#39;Select First With Where Clause\u0026#39;**                             | **Person**               |   **458.2 μs** | **32.11 μs** | **48.55 μs** |    **8** | **1.0000** |      **-** |      **-** |  **11.38 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Dynamic Return (aliased columns)\u0026#39;**        | **IList\u0026lt;dynamic\u0026gt;**       |   **324.8 μs** |  **6.00 μs** |  **9.08 μs** |    **4** | **4.0000** | **1.5000** | **0.5000** |  **31.39 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Dynamic Return Async (aliased columns)\u0026#39;**  | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** |   **494.0 μs** | **20.54 μs** | **31.05 μs** |    **8** | **4.0000** | **1.0000** |      **-** |  **37.66 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Dynamic Return Async\u0026#39;**                    | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** |   **469.2 μs** |  **8.81 μs** | **13.31 μs** |    **8** | **4.0000** | **1.0000** |      **-** |  **37.75 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Dynamic Return\u0026#39;**                          | **IList\u0026lt;dynamic\u0026gt;**       |   **320.7 μs** |  **5.53 μs** |  **9.29 μs** |    **4** | **4.0000** | **1.5000** | **0.5000** |  **31.49 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Entity Return Async\u0026#39;**                     | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **523.4 μs** | **14.83 μs** | **22.42 μs** |    **9** | **6.0000** |      **-** |      **-** |  **62.52 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Join Condition With Entity Return Async\u0026#39;** | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **1,366.6 μs** | **11.24 μs** | **16.99 μs** |   **12** | **8.0000** | **2.0000** |      **-** |  **65.52 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Join Condition\u0026#39;**                          | **IList\u0026lt;Person\u0026gt;**        | **1,200.0 μs** | **16.05 μs** | **24.26 μs** |   **11** | **6.0000** |      **-** |      **-** |  **59.13 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Scalar Return Async\u0026#39;**                     | **Task\u0026lt;IList\u0026lt;Int32\u0026gt;\u0026gt;**   |   **359.9 μs** |  **9.97 μs** | **15.07 μs** |    **6** | **1.0000** |      **-** |      **-** |  **15.14 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Scalar Return\u0026#39;**                           | **IList\u0026lt;Int32\u0026gt;**         |   **230.2 μs** |  **8.51 μs** | **16.26 μs** |    **1** | **1.0000** |      **-** |      **-** |   **9.06 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Where Clause With Entity Return Async\u0026#39;**   | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **578.5 μs** | **40.40 μs** | **61.08 μs** |   **10** | **6.0000** |      **-** |      **-** |  **64.04 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50 With Where Clause\u0026#39;**                            | **IList\u0026lt;Person\u0026gt;**        |   **420.3 μs** |  **8.78 μs** | **13.28 μs** |    **8** | **7.0000** | **1.5000** | **0.5000** |  **57.86 KB** |\n| **dbExpression** | **\u0026#39;Select Top 50\u0026#39;**                                              | **IList\u0026lt;Person\u0026gt;**        |   **439.1 μs** | **11.19 μs** | **16.92 μs** |    **8** | **6.5000** | **1.0000** | **0.5000** |  **56.34 KB** |\n\n\n\n### EF Core (8.0.3)\n\n``` ini\n\nBenchmarkDotNet v0.13.12, Windows 11 (10.0.22000.2538/21H2/SunValley)\nIntel Core i9-9980HK CPU 2.40GHz, 1 CPU, 8 logical and 8 physical cores\n.NET SDK 8.0.202\n  [Host]   : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n  ShortRun : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n\n\n```\n| ORM    | Method                                                             | Return               | Mean       | StdDev    | Error     | Rank | Gen0   | Gen1   | Allocated |\n|------- |------------------------------------------------------------------- |--------------------- |-----------:|----------:|----------:|-----:|-------:|-------:|----------:|\n| **EFCore** | **\u0026#39;Select First Record With Dynamic Return (aliased columns)\u0026#39;**        | **dynamic**              |   **419.9 μs** |   **6.51 μs** |  **10.93 μs** |    **5** | **1.0000** |      **-** |   **8.31 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Dynamic Return Async (aliased columns)\u0026#39;**  | **Task\u0026lt;dynamic\u0026gt;**        |   **430.8 μs** |  **69.79 μs** | **105.51 μs** |    **5** | **1.0000** |      **-** |  **11.36 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Dynamic Return Async\u0026#39;**                    | **Task\u0026lt;dynamic\u0026gt;**        |   **386.7 μs** |  **10.61 μs** |  **20.29 μs** |    **3** | **1.0000** |      **-** |  **11.48 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Dynamic Return\u0026#39;**                          | **dynamic**              |   **446.9 μs** |  **20.28 μs** |  **34.08 μs** |    **5** | **1.0000** |      **-** |   **8.28 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Entity Return Async\u0026#39;**                     | **Task\u0026lt;Person\u0026gt;**         |   **461.4 μs** |  **14.14 μs** |  **23.77 μs** |    **5** | **1.0000** |      **-** |  **10.74 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Join Condition With Entity Return Async\u0026#39;** | **Task\u0026lt;Person\u0026gt;**         |   **486.7 μs** |  **47.11 μs** |  **71.23 μs** |    **5** | **1.0000** |      **-** |  **13.66 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Join Condition\u0026#39;**                          | **Person**               |   **602.6 μs** |  **18.53 μs** |  **28.02 μs** |    **7** | **1.0000** |      **-** |  **10.53 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Scalar Return Async\u0026#39;**                     | **Task\u0026lt;dynamic\u0026gt;**        |   **381.1 μs** |  **38.69 μs** |  **65.02 μs** |    **3** | **1.0000** |      **-** |   **9.52 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Scalar Return\u0026#39;**                           | **Int32**                |   **447.0 μs** |  **21.15 μs** |  **35.55 μs** |    **5** |      **-** |      **-** |   **6.25 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Where Clause With Entity Return Async\u0026#39;**   | **Task\u0026lt;Person\u0026gt;**         |   **414.6 μs** |  **33.90 μs** |  **56.96 μs** |    **4** | **1.0000** |      **-** |  **13.04 KB** |\n| **EFCore** | **\u0026#39;Select First Record With Where Clause\u0026#39;**                            | **Person**               |   **508.5 μs** |  **27.87 μs** |  **42.14 μs** |    **5** | **1.0000** |      **-** |   **9.92 KB** |\n| **EFCore** | **\u0026#39;Select First Record\u0026#39;**                                              | **Person**               |   **454.9 μs** |  **18.62 μs** |  **28.16 μs** |    **5** |      **-** |      **-** |   **7.63 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Dynamic Return (aliased columns)\u0026#39;**              | **IList\u0026lt;dynamic\u0026gt;**       |   **356.0 μs** |   **6.62 μs** |  **12.66 μs** |    **3** | **3.0000** | **1.0000** |  **30.27 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Dynamic Return Async (aliased columns)\u0026#39;**        | **Task\u0026lt;List\u0026lt;dynamic\u0026gt;\u0026gt;**  |   **741.2 μs** | **184.03 μs** | **278.23 μs** |    **7** | **4.0000** |      **-** |  **33.24 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Dynamic Return Async\u0026#39;**                          | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** |   **552.7 μs** |  **17.33 μs** |  **33.13 μs** |    **6** | **4.0000** | **1.0000** |  **32.61 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Dynamic Return\u0026#39;**                                | **IList\u0026lt;dynamic\u0026gt;**       |   **349.6 μs** |   **6.67 μs** |  **12.76 μs** |    **3** | **3.0000** | **1.0000** |  **29.64 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Entity Return Async\u0026#39;**                           | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **475.5 μs** |  **21.60 μs** |  **36.29 μs** |    **5** | **4.0000** |      **-** |  **33.84 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Join Condition With Entity Return Async\u0026#39;**       | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **1,263.3 μs** |  **30.30 μs** |  **50.92 μs** |    **9** | **4.0000** |      **-** |  **42.86 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Join Condition\u0026#39;**                                | **IList\u0026lt;Person\u0026gt;**        | **1,079.9 μs** |  **23.52 μs** |  **35.56 μs** |    **8** | **4.0000** |      **-** |  **36.15 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Scalar Return Async\u0026#39;**                           | **Task\u0026lt;IList\u0026lt;Int32\u0026gt;\u0026gt;**   |   **433.8 μs** |  **11.74 μs** |  **22.45 μs** |    **5** | **2.0000** |      **-** |  **24.22 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Scalar Return\u0026#39;**                                 | **IList\u0026lt;Int32\u0026gt;**         |   **294.6 μs** |   **5.59 μs** |   **8.45 μs** |    **2** | **2.5000** |      **-** |  **20.63 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Where Clause With Entity Return Async\u0026#39;**         | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **432.9 μs** |  **13.96 μs** |  **26.70 μs** |    **5** | **2.0000** |      **-** |  **22.24 KB** |\n| **EFCore** | **\u0026#39;Select Top 50 With Where Clause\u0026#39;**                                  | **IList\u0026lt;Person\u0026gt;**        |   **285.3 μs** |   **5.32 μs** |   **8.05 μs** |    **1** | **2.0000** |      **-** |   **19.1 KB** |\n| **EFCore** | **\u0026#39;Select Top 50\u0026#39;**                                                    | **IList\u0026lt;Person\u0026gt;**        |   **348.2 μs** |  **10.33 μs** |  **17.36 μs** |    **3** | **3.0000** |      **-** |  **27.17 KB** |\n\n\n``` ini\n\nBenchmarkDotNet v0.13.12, Windows 11 (10.0.22000.2538/21H2/SunValley)\nIntel Core i9-9980HK CPU 2.40GHz, 1 CPU, 8 logical and 8 physical cores\n.NET SDK 8.0.202\n  [Host]   : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n  ShortRun : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n\n\n```\n| ORM                  | Method                                                             | Return               | Mean       | StdDev    | Error     | Rank | Gen0   | Gen1   | Allocated |\n|--------------------- |------------------------------------------------------------------- |--------------------- |-----------:|----------:|----------:|-----:|-------:|-------:|----------:|\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Dynamic Return (aliased columns)\u0026#39;**        | **dynamic**              |   **345.3 μs** |   **7.34 μs** |  **14.03 μs** |    **3** | **1.0000** |      **-** |   **8.31 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Dynamic Return Async (aliased columns)\u0026#39;**  | **Task\u0026lt;dynamic\u0026gt;**        |   **469.9 μs** |  **38.20 μs** |  **64.19 μs** |    **6** | **1.0000** |      **-** |  **11.36 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Dynamic Return Async\u0026#39;**                    | **Task\u0026lt;dynamic\u0026gt;**        |   **466.6 μs** |  **15.21 μs** |  **29.08 μs** |    **6** | **1.0000** |      **-** |  **11.32 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Dynamic Return\u0026#39;**                          | **dynamic**              |   **373.1 μs** |  **12.89 μs** |  **24.64 μs** |    **4** | **1.0000** |      **-** |   **8.28 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Entity Return Async\u0026#39;**                     | **Task\u0026lt;Person\u0026gt;**         |   **449.0 μs** |  **28.66 μs** |  **43.33 μs** |    **6** | **1.0000** |      **-** |  **10.96 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Join Condition With Entity Return Async\u0026#39;** | **Task\u0026lt;Person\u0026gt;**         |   **478.9 μs** |  **34.20 μs** |  **51.71 μs** |    **6** | **1.0000** |      **-** |  **14.02 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Join Condition\u0026#39;**                          | **Person**               |   **422.8 μs** |  **18.13 μs** |  **30.47 μs** |    **6** | **1.0000** |      **-** |  **10.83 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Scalar Return Async\u0026#39;**                     | **Task\u0026lt;dynamic\u0026gt;**        |   **425.2 μs** |   **9.27 μs** |  **17.72 μs** |    **6** | **1.0000** |      **-** |   **9.22 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Scalar Return\u0026#39;**                           | **Int32**                |   **364.8 μs** |  **15.93 μs** |  **26.76 μs** |    **4** |      **-** |      **-** |   **6.25 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Where Clause With Entity Return Async\u0026#39;**   | **Task\u0026lt;Person\u0026gt;**         |   **444.6 μs** |  **28.83 μs** |  **55.12 μs** |    **6** | **1.0000** |      **-** |  **13.26 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record With Where Clause\u0026#39;**                            | **Person**               |   **385.0 μs** |   **5.76 μs** |  **11.01 μs** |    **5** | **1.0000** |      **-** |  **10.32 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select First Record\u0026#39;**                                              | **Person**               |   **281.2 μs** |  **16.36 μs** |  **24.73 μs** |    **1** | **0.5000** |      **-** |   **7.92 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Dynamic Return (aliased columns)\u0026#39;**              | **IList\u0026lt;dynamic\u0026gt;**       |   **373.2 μs** |  **32.86 μs** |  **55.21 μs** |    **4** | **3.0000** | **1.0000** |  **30.27 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Dynamic Return Async (aliased columns)\u0026#39;**        | **Task\u0026lt;List\u0026lt;dynamic\u0026gt;\u0026gt;**  |   **517.3 μs** |  **18.63 μs** |  **35.62 μs** |    **6** | **4.0000** | **1.0000** |  **33.24 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Dynamic Return Async\u0026#39;**                          | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** |   **501.0 μs** |   **6.18 μs** |  **11.81 μs** |    **6** | **4.0000** | **1.0000** |  **32.61 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Dynamic Return\u0026#39;**                                | **IList\u0026lt;dynamic\u0026gt;**       |   **368.0 μs** |   **3.97 μs** |   **7.59 μs** |    **4** | **3.0000** | **1.0000** |  **29.64 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Entity Return Async\u0026#39;**                           | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **613.6 μs** | **111.38 μs** | **168.39 μs** |    **7** | **4.0000** |      **-** |  **44.78 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Join Condition With Entity Return Async\u0026#39;**       | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **1,397.4 μs** |  **24.94 μs** |  **41.91 μs** |    **9** | **6.0000** | **2.0000** |  **53.65 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Join Condition\u0026#39;**                                | **IList\u0026lt;Person\u0026gt;**        | **1,241.1 μs** |  **27.99 μs** |  **47.04 μs** |    **8** | **6.0000** | **2.0000** |  **50.68 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Scalar Return Async\u0026#39;**                           | **Task\u0026lt;IList\u0026lt;Int32\u0026gt;\u0026gt;**   |   **455.6 μs** |   **7.99 μs** |  **15.28 μs** |    **6** | **2.0000** |      **-** |  **24.22 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Scalar Return\u0026#39;**                                 | **IList\u0026lt;Int32\u0026gt;**         |   **339.9 μs** |  **31.33 μs** |  **52.64 μs** |    **2** | **2.0000** |      **-** |  **20.63 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Where Clause With Entity Return Async\u0026#39;**         | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  |   **454.8 μs** |   **9.65 μs** |  **18.45 μs** |    **6** | **2.0000** |      **-** |  **22.46 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50 With Where Clause\u0026#39;**                                  | **IList\u0026lt;Person\u0026gt;**        |   **336.1 μs** |  **41.18 μs** |  **69.20 μs** |    **2** | **2.0000** |      **-** |  **19.39 KB** |\n| **EFCore (No Tracking)** | **\u0026#39;Select Top 50\u0026#39;**                                                    | **IList\u0026lt;Person\u0026gt;**        |   **498.3 μs** |  **30.70 μs** |  **46.42 μs** |    **6** | **5.0000** | **1.0000** |  **41.71 KB** |\n\n\n\n### Dapper (2.1.35)\n\n``` ini\n\nBenchmarkDotNet v0.13.12, Windows 11 (10.0.22000.2538/21H2/SunValley)\nIntel Core i9-9980HK CPU 2.40GHz, 1 CPU, 8 logical and 8 physical cores\n.NET SDK 8.0.202\n  [Host]   : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n  ShortRun : .NET 8.0.3 (8.0.324.11423), X64 RyuJIT AVX2\n\n\n```\n| ORM    | Method                                                       | Return               | Mean     | StdDev   | Error    | Rank | Gen0   | Gen1   | Gen2   | Allocated |\n|------- |------------------------------------------------------------- |--------------------- |---------:|---------:|---------:|-----:|-------:|-------:|-------:|----------:|\n| **Dapper** | **\u0026#39;Select First Record\u0026#39;**                                        | **Person**               | **287.9 μs** |  **5.29 μs** |  **8.88 μs** |    **6** | **0.5000** |      **-** |      **-** |   **4.63 KB** |\n| **Dapper** | **\u0026#39;Select First With Dynamic Return (aliased columns)\u0026#39;**         | **dynamic**              | **172.0 μs** |  **4.18 μs** |  **7.03 μs** |    **1** | **0.2500** |      **-** |      **-** |   **3.13 KB** |\n| **Dapper** | **\u0026#39;Select First With Dynamic Return Async (aliased columns)\u0026#39;**   | **Task\u0026lt;dynamic\u0026gt;**        | **274.2 μs** |  **1.69 μs** |  **3.24 μs** |    **5** | **0.5000** |      **-** |      **-** |   **4.81 KB** |\n| **Dapper** | **\u0026#39;Select First With Dynamic Return Async\u0026#39;**                     | **Task\u0026lt;dynamic\u0026gt;**        | **260.9 μs** |  **2.56 μs** |  **3.87 μs** |    **4** |      **-** |      **-** |      **-** |   **3.74 KB** |\n| **Dapper** | **\u0026#39;Select First With Dynamic Return\u0026#39;**                           | **dynamic**              | **169.4 μs** |  **1.27 μs** |  **2.13 μs** |    **1** | **0.2500** |      **-** |      **-** |   **3.09 KB** |\n| **Dapper** | **\u0026#39;Select First With Entity Return Async\u0026#39;**                      | **Task\u0026lt;Person\u0026gt;**         | **251.0 μs** |  **8.43 μs** | **14.16 μs** |    **3** | **0.5000** |      **-** |      **-** |   **6.24 KB** |\n| **Dapper** | **\u0026#39;Select First With Join Condition With Entity Return Async\u0026#39;**  | **Task\u0026lt;Person\u0026gt;**         | **264.6 μs** |  **4.12 μs** |  **6.23 μs** |    **4** | **0.5000** |      **-** |      **-** |   **7.38 KB** |\n| **Dapper** | **\u0026#39;Select First With Join Condition\u0026#39;**                           | **Person**               | **298.4 μs** | **10.50 μs** | **15.87 μs** |    **7** | **0.5000** |      **-** |      **-** |   **5.77 KB** |\n| **Dapper** | **\u0026#39;Select First With Scalar Return Async\u0026#39;**                      | **Task\u0026lt;Int32\u0026gt;**          | **247.2 μs** |  **3.57 μs** |  **5.39 μs** |    **3** |      **-** |      **-** |      **-** |   **4.05 KB** |\n| **Dapper** | **\u0026#39;Select First With Scalar Return\u0026#39;**                            | **Int32**                | **178.0 μs** |  **5.39 μs** |  **8.15 μs** |    **1** | **0.2500** |      **-** |      **-** |   **2.37 KB** |\n| **Dapper** | **\u0026#39;Select First With Where Clause With Entity Return Async\u0026#39;**    | **Task\u0026lt;Person\u0026gt;**         | **259.0 μs** |  **4.19 μs** |  **7.04 μs** |    **4** | **0.5000** |      **-** |      **-** |   **7.27 KB** |\n| **Dapper** | **\u0026#39;Select First With Where Clause\u0026#39;**                             | **Person**               | **223.1 μs** | **12.99 μs** | **19.64 μs** |    **2** | **0.5000** |      **-** |      **-** |   **5.59 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Dynamic Return (aliased columns)\u0026#39;**        | **IList\u0026lt;dynamic\u0026gt;**       | **246.7 μs** |  **4.95 μs** |  **7.49 μs** |    **3** | **1.5000** | **1.2500** |      **-** |  **13.12 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Dynamic Return Async (aliased columns)\u0026#39;**  | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** | **346.8 μs** |  **7.33 μs** | **11.08 μs** |   **10** | **1.5000** | **1.0000** |      **-** |   **14.8 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Dynamic Return Async\u0026#39;**                    | **Task\u0026lt;IList\u0026lt;dynamic\u0026gt;\u0026gt;** | **346.3 μs** |  **3.86 μs** |  **5.84 μs** |   **10** | **1.5000** | **1.0000** |      **-** |  **13.73 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Dynamic Return\u0026#39;**                          | **IList\u0026lt;dynamic\u0026gt;**       | **249.1 μs** |  **2.34 μs** |  **4.48 μs** |    **3** | **1.5000** | **1.0000** |      **-** |  **13.08 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Entity Return Async\u0026#39;**                     | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **376.4 μs** |  **6.57 μs** |  **9.93 μs** |   **11** | **3.0000** | **1.0000** |      **-** |  **26.48 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Join Condition With Entity Return Async\u0026#39;** | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **432.3 μs** |  **8.47 μs** | **12.80 μs** |   **12** | **3.0000** | **1.0000** |      **-** |  **29.12 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Join Condition\u0026#39;**                          | **IList\u0026lt;Person\u0026gt;**        | **339.4 μs** |  **3.09 μs** |  **5.20 μs** |    **9** | **3.0000** | **1.0000** | **0.5000** |   **27.5 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Scalar Return Async\u0026#39;**                     | **Task\u0026lt;IList\u0026lt;Int32\u0026gt;\u0026gt;**   | **309.6 μs** |  **3.60 μs** |  **5.45 μs** |    **8** | **0.5000** |      **-** |      **-** |   **6.02 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Scalar Return\u0026#39;**                           | **IList\u0026lt;Int32\u0026gt;**         | **223.5 μs** |  **4.20 μs** |  **6.34 μs** |    **2** | **0.5000** |      **-** |      **-** |   **4.33 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Where Clause With Entity Return Async\u0026#39;**   | **Task\u0026lt;IList\u0026lt;Person\u0026gt;\u0026gt;**  | **379.3 μs** |  **5.52 μs** |  **8.34 μs** |   **11** | **3.0000** | **1.0000** |      **-** |  **27.51 KB** |\n| **Dapper** | **\u0026#39;Select Top 50 With Where Clause\u0026#39;**                            | **IList\u0026lt;Person\u0026gt;**        | **299.0 μs** |  **2.81 μs** |  **4.72 μs** |    **7** | **3.0000** | **1.5000** | **0.5000** |  **25.83 KB** |\n| **Dapper** | **\u0026#39;Select Top 50\u0026#39;**                                              | **IList\u0026lt;Person\u0026gt;**        | **287.6 μs** |  **3.32 μs** |  **5.02 μs** |    **6** | **3.0000** | **1.0000** | **0.5000** |  **24.86 KB** |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbexpression-team%2Fdbexpression","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdbexpression-team%2Fdbexpression","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdbexpression-team%2Fdbexpression/lists"}