网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > .Net >

ShadowSql.net之静态查询示例

时间:2025-04-03 12:36

人气:

作者:admin

标签:

导读:ShadowSql拼接sql除了性能突出外还是讲逻辑的 其一为了更好拼接正确的sql,提供代码可读性 其二是为了码农同学爽,拼写起来更简便 以下我就举几个例子给大家观摩一下 一、单表查询示例...

ShadowSql拼接sql除了性能突出外还是讲逻辑的

其一为了更好拼接正确的sql,提供代码可读性

其二是为了码农同学爽,拼写起来更简便

以下我就举几个例子给大家观摩一下

 

一、单表查询示例

为了静态检测,我们首先自定义一个表UserTable用来查询

    class UserTable : Table
    {
        public UserTable()
            : base("Users")
        {
            Id = DefineColumn(nameof(Id));
            Status = DefineColumn(nameof(Status));
        }
        #region Columns
        public IColumn Id { get; private set; }
        public IColumn Status { get; private set; }
        #endregion
    }

1、用SqlQuery查询

        var users = new UserTable();
        var query = users.ToSqlQuery()
            .Where(users.Id.LessValue(100));

我们还可以用这样查询

        var query = new UserTable()
            .ToSqlQuery()
            .Where(user => user.Id.Less("LastId"));

sql: SELECT * FROM [Users]  WHERE [Id]<@LastId

2、用Query查询

        var users = new UserTable();
        var query = users.ToQuery()
            .And(users.Id.LessValue(100));

换种写法

        var query = new UserTable()
            .ToQuery()
            .And(user => user.Id.Less("LastId"));

 sql: SELECT * FROM [Users]  WHERE [Id]<@LastId

3、Query可以用&和|重载符查询

        var users = new UserTable();
        var query = users.ToQuery()
            .And(users.Id.LessValue(100) & users.Status.EqualValue(true));

sql: SELECT * FROM [Users] WHERE [Id]<100 AND [Status]=1

        var users = new UserTable();
        var query = users.ToQuery()
            .And(users.Id.LessValue(100) | users.Status.EqualValue(true));

sql: SELECT * FROM [Users] WHERE [Id]<100 OR [Status]=1

 

二、联表查询示例

为了静态检测,我们自定义两个别名表

    class CommentTable : TableAlias<Table>
    {
        public CommentTable(string tableAlias)
            : this(new Table("Comments"), tableAlias)
        {
        }
        private CommentTable(Table table, string tableAlias)
            : base(table, tableAlias)
        {
            Id = AddColumn(Column.Use(nameof(Id)));
            PostId = AddColumn(Column.Use(nameof(PostId)));
            Content = AddColumn(Column.Use(nameof(Content)));
            Pick = AddColumn(Column.Use(nameof(Pick)));
        }
        public readonly IPrefixColumn Id;
        public readonly IPrefixColumn PostId;
        public readonly IPrefixColumn Content;
        public readonly IPrefixColumn Pick;
    }
    class PostTable : TableAlias<Table>
    {
        public PostTable(string tableAlias)
            : this(new Table("Posts"), tableAlias)
        {
        }
        private PostTable(Table table, string tableAlias)
            : base(table, tableAlias)
        {
            Id = AddColumn(Column.Use(nameof(Id)));
            Title = AddColumn(Column.Use(nameof(Title)));
            Author = AddColumn(Column.Use(nameof(Author)));
        }
        //Id, Title, Author
        public readonly IPrefixColumn Id;
        public readonly IPrefixColumn Title;
        public readonly IPrefixColumn Author;
    }

准备好了就方便联表查询了

        CommentTable c = new("c");
        PostTable p = new("p");
        var joinOn = c.Join(p)
                .And(c.PostId.Equal(p.Id));
        var query = joinOn.Root
            .And(c.Pick.EqualValue(true))
            .And(p.Author.EqualValue("jxj"));
        CommentTable c = new("c");
        PostTable p = new("p");
        var joinOn = c.SqlJoin(p)
                .On(c.PostId.Equal(p.Id));
        var query = joinOn.Root
            .Where(c.Pick.EqualValue(true))
            .Where(p.Author.EqualValue("jxj"));

sql: SELECT * FROM [Comments] AS c INNER JOIN [Posts] AS p ON c.[PostId]=p.[Id] where c.[Pick]=1 AND p.[Author]='jxj'

 

Query模式和SqlQuery模式各有优点,您喜欢哪种?

源码托管地址: https://github.com/donetsoftwork/Shadow。
如果大家喜欢请动动您发财的小手手帮忙点一下Star。

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信