当前位置: 首页 > news >正文

扩散模型对抗样本经典baselines兔

一、简化查询

1. 先看一下查询的例子

///

/// 账户获取服务

///

///

///

public class AccountGetService(AccountTable table, IShadowBuilder builder)

{

private readonly SqlSource _source = new(builder.DataSource);

private readonly IParamQuery _accountQuery

= builder.BuildResult(

table.ToQuery()

.And(account => account.Id.Equal())

.ToSelect()

.SelectSelfColumns()

);

///

/// 获取账户

///

///

///

///

public Task GetAsync(Account param, CancellationToken token = default)

=> _accountQuery.GetFirstAsync(_source, param, token);

}

2. 调用方式如下

var account = await accountGetService.GetAsync(new Account { Id = 1L });

3. 这个例子我们可以简化一下

参数直接使用Id(类型由Account简化为long)

很大一部分数据库操作都只有一个参数(GetById、GetByName等)

为此定义一个含单个属性类有点浪费

按上面的例子使用实体类作为参数也感觉怪怪的

DBShadow.net支持这种简化操作

单个参数无需封装,直接使用参数类型即可

public class AccountGetService(AccountTable table, IShadowBuilder builder)

{

private readonly SqlSource _source = new(builder.DataSource);

private readonly IParamQuery _accountQuery

= builder.BuildResult(

table.ToQuery()

.And(account => account.Id.Equal())

.ToSelect()

.SelectSelfColumns()

);

public Task GetAsync(long accountId, CancellationToken token = default)

=> _accountQuery.GetFirstAsync(_source, param, token);

}

var account = await accountGetService.GetAsync(1L);

4. 特别注意不要在Dapper中这样使用

Dapper是不支持这种简化操作

以下Dapper错误示例会抛出异常

System.InvalidOperationException:“Must add values for the following parameters: @Id”

await using var conn = _dataSource.CreateConnection();

var sql = "SELECT \"Id\",\"Title\",\"Content\",\"Done\",\"LastTime\" FROM \"Todo\" WHERE \"Id\"=@Id";

var first = await conn.QueryFirstOrDefaultAsync(sql, 1L);

二、 集合参数也支持简化操作

1. IN查询简化的例子

In的参数名是可选和前面例子的Equal是一样的,默认字段名

In查询的实参支持数组、集合及字典

只有In一个集合参数时支持直接传数组、集合或字典

这时参数名(eg: AccountIds)就无所谓取什么名了

因为不需要按参数名反射获取属性了

///

/// 批量账户获取服务

///

///

///

public class AccountBatchService(AccountTable table, IShadowBuilder builder)

{

private readonly SqlSource _source = new(builder.DataSource);

private readonly IParamQuery _accountQuery

= builder.BuildResult(

table.ToQuery()

.And(account => account.Id.In("AccountIds"))

.ToSelect()

.SelectSelfColumns()

);

///

/// 批量获取账户

///

///

///

///

public IAsyncEnumerable GetAsync(long[] accountIds, CancellationToken token = default)

=> _accountQuery.QueryAsync(_source, accountIds, token);

}

2. 以上调用的例子如下

[Fact]

public async Task Batch()

{

var count = 0;

var service = new AccountBatchService(table, builder);

var list = service.GetAsync([1L, 2L, 3L]);

await foreach (var item in list)

{

_output.WriteLine($"{item.Id}:{item.Amount}");

count++;

}

Assert.Equal(3, count);

}

// 1:100

// 2:200

// 3:300

三、泛型查询

1. 泛型服务类代码

该服务用来按字段Id查询表Account

参数TParam是泛型,这样可以直接使用DTO参数来查询,减少类型转化的开销

返回值TAccount也是泛型,这样就可以直接返回视图模型或者领域模型

这样的泛型服务类就非常的通用

///

/// 账户获取泛型服务

///

///

///

public class AccountGetService(AccountTable table, IShadowBuilder builder)

{

private readonly SqlSource _source = new(builder.DataSource);

private readonly IParamQuery _accountQuery

= builder.BuildResult(

table.ToQuery()

.And(account => account.Id.Equal())

.ToSelect()

.SelectSelfColumns()

);

///

/// 获取账户

///

///

///

///

public Task GetAsync(TParam param, CancellationToken token = default)

=> _accountQuery.GetFirstAsync(_source, param, token);

}

2. 中规中矩的调用方式

var service = new AccountGetService(_table, _builder);

var account = await service.GetAsync(new Account { Id = 1L });

Assert.NotNull(account);

3. 支持简单调用方式

var service = new AccountGetService(_table, _builder);

var account = await service.GetAsync(1L);

Assert.NotNull(account);

四、总结

DBShadow.net预编译比较智能

只有1个参数时支持化繁为简,支持直接传值做为参数值

这样可以节约定义只有一个属性的参数类

参数和返回值类型还可以定义为泛型,可以做到更加灵活友邻弊坪

http://www.jsqmd.com/news/625343/

相关文章:

  • ACE-Step惊艳效果展示:19种语言歌曲生成真实案例分享
  • [机器人仿真]WEBOTS并联闭环机构实战:构建轮腿机器人自适应越障模型
  • 红队实战工具箱:悬剑5集成环境深度解析
  • 解决armbian刷入emmc后的boot分区问题:nand-sata-install的正确使用
  • 2026年论文AIGC率过高怎么办?10款AI降重工具必备 - 降AI实验室
  • 告别环境报错!用LLaMa-Factory的WebUI界面,20分钟搞定Llama3-8B-Instruct的微调
  • LangChain教程-、Langchain基础盏
  • OpenClaw+优云智算Coding Plan:从灵感到成文,再到发布的全流程AI自动化鄙
  • 终极免费虚拟摄像头方案:如何快速将OBS画面分发到4个应用程序
  • 显卡驱动冲突频发?DDU完整指南帮你彻底清理NVIDIA/AMD/Intel驱动残留
  • 20252817 2025-2026-2 《网络攻防实践》实验三
  • IndexTTS2终极指南:免费开源的情感可控零样本语音合成系统
  • Windows11下修复解压文件中文乱码的终极指南
  • 李雅普诺夫函数在非线性控制系统中的设计与应用
  • 【AI运维监控黄金标准】:为什么93%的大模型项目在上线6个月后遭遇SLO滑坡?(附Gartner认证的12项基线指标)
  • 今天不设计灰度策略,明天就回滚AI版本:AI原生研发最后的防御工事——4层熔断+2级回滚+1键快照应急协议
  • Dup Scout(重复文件删除工具)
  • 从数据清洗到模型评估:VGGNet在乳腺超声图像分类中的实战解析
  • 如何彻底掌控Windows Defender:开源工具defender-control终极指南
  • 跨境社媒运营越往后越难,真正拉开差距的往往不是内容,而是底层协作能力
  • OBS多平台直播插件:一键实现多平台同步推流的高效解决方案
  • 终极色彩校准指南:用Novideo_sRGB免费实现专业级显示器色彩管理
  • 不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico晌
  • Python 3.12 Special Attribute - 09 -__bases__
  • Backbone:深度解析DLA中的迭代与分层聚合机制
  • 别再复制粘贴了!手把手教你用TypeScript封装一个企业级axios请求库(附完整源码)
  • 教育IT负责人紧急必读:2026奇点大会锁定的4类技术债务+2个不可逆淘汰节点,6月30日前必须响应
  • 2026年4月目前可拆卸板式换热器公司,润滑油泵/风冷却系统/风冷式油冷却器/溢流阀,可拆卸板式换热器实力厂家有哪些 - 品牌推荐师
  • AI原生软件的“心脏手术”:如何在不中断线上服务前提下,完成特征管道热替换与模型灰度切流(附eBPF级可观测性注入方案)
  • C# 面试高频题:装箱和拆箱是如何影响性能的?负