{"id":19930660,"url":"https://github.com/jacentino/typesafesql","last_synced_at":"2025-05-03T10:31:58.136Z","repository":{"id":14699166,"uuid":"17419296","full_name":"jacentino/TypesafeSQL","owner":"jacentino","description":"Linq-like SQL query builder for use with microORMs.","archived":false,"fork":false,"pushed_at":"2014-03-09T22:43:07.000Z","size":612,"stargazers_count":12,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-07T15:01:33.451Z","etag":null,"topics":["c-sharp","dapper","linq","sql-query"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"robbierobert/MongoDB","license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jacentino.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":"2014-03-04T22:18:06.000Z","updated_at":"2023-03-25T15:42:03.000Z","dependencies_parsed_at":"2022-09-23T22:30:39.770Z","dependency_job_id":null,"html_url":"https://github.com/jacentino/TypesafeSQL","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacentino%2FTypesafeSQL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacentino%2FTypesafeSQL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacentino%2FTypesafeSQL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jacentino%2FTypesafeSQL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jacentino","download_url":"https://codeload.github.com/jacentino/TypesafeSQL/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252178982,"owners_count":21707106,"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":["c-sharp","dapper","linq","sql-query"],"created_at":"2024-11-12T23:04:51.435Z","updated_at":"2025-05-03T10:31:57.582Z","avatar_url":"https://github.com/jacentino.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"TypesafeSQL\n===========\n\nLinq-like SQL query builder for use with micro ORMs.\n\nThe purpose of TypesafeSQL is to allow for generate SQL queries in typesafe way, thus it's not a real Linq provider to relational database. It provides familiar linq syntax to express queries, but doesn't implement IQueryable. \n\nFeatures\n--------\n* select, where, order by\n* inner joins, \n* outer joins (not available with SQL-like syntax)\n* group by\n* count, sum, avg (only available in queries with group by)\n* union, intersect, except\n* almost all MS SQL functions\n* subqueries (when defined outside a main query)\n* easy integration with [Dapper.NET](http://code.google.com/p/dapper-dot-net/)\n* mapping class names to table names and property names to column names with name resolvers\n\nSupported databases\n-------------------\nFor now, only MS SQL 2012 is supported. Future releases will support MySQL, PostgreSQL and SQLite.\n\nExamples\n--------\n\nSimple SQL command generation:\n\n    var builder = new QueryBuilder();\n    var query = from u in builder.Table\u003cUser\u003e() where u.LoginAttempts \u003e= 3 select u;\n    var sql = query.ToSql();\n\nRetrieving data with Dapper:\n\n    var connection = new SqlConnection(\u003cConnection String\u003e);\n    var builder = new QueryBuilder();\n    var users = connection.Query(from u in builder.Table\u003cUser\u003e() where u.LoginAttempts \u003e= 3 select u);\n    \nInner joins:\n\n    var builder = new QueryBuilder();\n    var roles = from user in builder.Table\u003cUser\u003e()\n                join link in builder.Table\u003cUserRoleLink\u003e() on user.Id equals link.UserId\n                join role in builder.Table\u003cRole\u003e() on link.RoleId equals role.Id\n                select new { user.Login, Role = role.Name };\n\nOuter joins:\n\n    var builder = new QueryBuilder();\n    var roles = builder.Table\u003cUser\u003e()\n        .LeftJoin(builder.Table\u003cUserRoleLink\u003e(), user =\u003e user.Id, link =\u003e link.UserId, (user, link) =\u003e new { user, link })\n        .LeftJoin(builder.Table\u003cRole\u003e(), ul =\u003e ul.link.RoleId, role =\u003e role.Id, (ul, role) =\u003e new { ul, role })\n        .Select(ulr =\u003e new { ulr.ul.user.Login, ulr.role.Name });\n\nGroup by:\n\n    var builder = new QueryBuilder();\n    var roleCounts = from l in builder.Table\u003cUserRoleLink\u003e()\n                     group l by l.UserId into lg\n                     select new { UserId = lg.Key, NumOfRoles = lg.Count(x =\u003e x.RoleId) };\n\nUsing name resolvers:\n\n        public class PrefixBasedNameResolver : DefaultNameResolver\n        {\n            public override string ResolveTableName(Type modelClass)\n            {\n                return \"tbl_\" + base.ResolveTableName(modelClass);\n            }\n            \n            public override string ResolveColumnName(System.Reflection.MemberInfo property)\n            {\n                return \"col_\" + base.ResolveColumnName(property);\n            }\n        }\n        ...\n        var builder = new QueryBuilder(new PrefixBasedNameResolver());\n        ...\n        \n        \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacentino%2Ftypesafesql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjacentino%2Ftypesafesql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjacentino%2Ftypesafesql/lists"}