{"id":19963819,"url":"https://github.com/olymo/doublel.queryablebuilder","last_synced_at":"2025-03-01T17:12:38.965Z","repository":{"id":56540389,"uuid":"281190936","full_name":"Olymo/Doublel.QueryableBuilder","owner":"Olymo","description":"🤘 Query-object based automatic predicate building, sorting and paging on top of IQueryable","archived":false,"fork":false,"pushed_at":"2025-02-03T11:38:11.000Z","size":60,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-03T12:26:52.561Z","etag":null,"topics":["database","entity-framework","entity-framework-core","iqueryable","query","query-builder","query-object"],"latest_commit_sha":null,"homepage":"https://github.com/Olymo/Doublel.QueryableBuilder","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/Olymo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-20T18:05:09.000Z","updated_at":"2025-02-03T11:37:49.000Z","dependencies_parsed_at":"2022-08-15T20:40:11.163Z","dependency_job_id":null,"html_url":"https://github.com/Olymo/Doublel.QueryableBuilder","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Olymo%2FDoublel.QueryableBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Olymo%2FDoublel.QueryableBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Olymo%2FDoublel.QueryableBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Olymo%2FDoublel.QueryableBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Olymo","download_url":"https://codeload.github.com/Olymo/Doublel.QueryableBuilder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241396777,"owners_count":19956408,"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","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":["database","entity-framework","entity-framework-core","iqueryable","query","query-builder","query-object"],"created_at":"2024-11-13T02:17:34.637Z","updated_at":"2025-03-01T17:12:38.946Z","avatar_url":"https://github.com/Olymo.png","language":"C#","readme":"![Build](https://github.com/Olymo/Doublel.QueryableBuilder/workflows/Build/badge.svg) ![](https://img.shields.io/nuget/dt/Doublel.QueryableBuilder?color=gree\u0026label=Downloads)\n## Queryable Builder for .NET\n\nThe idea behind quryable builder is simple - to reduce the amount of boilerplate query code in your codebase. It is designed around the idea of [query object](https://martinfowler.com/eaaCatalog/queryObject.html) and tries to further automate the process. You should simply design a class that will serve as a **query object**, decorate it with some of the predifined attributes, and, if needed, inherit from our base clasess and let the _**builder**_ to the heavy lifting of query composition. \n\nIn it's essence, it is a collection of extension methods for predicate building, sorting and paging on top of generic IQueryable interface. Based on your use-case, there are several options to choose from. \n\n### Download \u0026 Install\n\n**Nuget Package [Doublel.QueryableBuilder](https://www.nuget.org/packages/Doublel.QueryableBuilder/)**\n\n```powershell\nInstall-Package Doublel.QueryableBuilder\n```\nOR\n```powershell\ndotnet add package Doublel.QueryableBuilder\n```\nMinimum Requirements: **.NET Standard 2.0**\n\nThe tool was initialy designed for company's internal purposes, but we've figured out it could help someone else as well. If the example clicks for you, proceed to [building some queryes](https://github.com/Olymo/Doublel.QueryableBuilder/wiki/Building-Queries).\n### Quick example\nLet's say you have a user storage you would like to query and it's exposed via the IQueryable\u003cTestUser\u003e interface.\n\nFirst, you have your user class:\n```cs\npublic class TestUser\n{\n    public int Id { get; set; }\n    public string FirstName { get; set; }\n    public string Username { get; set; }\n    public int Age { get; set; }\n}\n```\n\nThen, you should define your **_query object_** class:\n```cs\npublic class UserQuery \n{\n    [QueryProperty]\n    public int? Age { get; set; }\n    [QueryProperties(ComparisonOperator.Contains, \"FirstName\", \"Username\")]\n    public string Keyword { get; set; }\n}\n```\n\nAnd finally, you query your datasource:\n```cs\nvar queryObject = new UserQuery \n{ \n    Age = 20; \n    Keyword = \"ma\"\n}\nvar users = new List\u003cUser\u003e { /* a bunch of users */}.AsQueryable();\n\nvar result = users.BuildQuery(queryObject);\n```\nThe resulting dataset will consist of all the users having being exactly 20 years old and containing string \"ma\" (case-insensitive) in either their Username of FirstName properties.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folymo%2Fdoublel.queryablebuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folymo%2Fdoublel.queryablebuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folymo%2Fdoublel.queryablebuilder/lists"}