当前位置: 首页 > 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/631261/

相关文章:

  • 孤能子视角:deepSeek“创新–幻觉“两模式自诊,顺看“真幻觉“与“伪幻觉“
  • Nunchaku FLUX.1 CustomV3从入门到精通:IPAdapter风格迁移全流程解析
  • 龙虾白嫖指南,请查收~何
  • PyCharm专业版远程开发实战:AutoDL服务器SSH连接与Python解释器配置详解
  • ESP32物联网设备时间不准?手把手教你用SNTP和HTTP双保险同步网络时间(含阿里云NTP服务器配置)
  • QTableWidget 表格组件攘
  • 8bit优化器实战指南:如何用AdamW8bit和PagedAdamW8bit在单卡上微调LLaMA模型
  • 2026禹州博润光伏发电安装综合实力评估:区域户用光伏首选推荐 - 博客湾
  • 前端使用AI试水报告赏
  • Spring Cloud服务熔断与降级
  • 全桥LLC变换器中死区时间与励磁电感的协同优化设计
  • 如何安全高效地备份微信聊天记录:WeChatExporter数据备份工具完整指南
  • Flow Matching(流匹配)实战解析:从理论到代码的生成之旅
  • 哥本哈士奇(aspnetx)俚
  • 单细胞数据降维避坑指南:PCA、线粒体基因过滤与数据标准化,一个都不能少
  • 3步掌握猫抓资源嗅探:从网页视频到本地文件的完整下载方案
  • Redis:延迟双删的适用边界与落地细节脚
  • PyTorch移动端部署入门:将训练好的模型转换为TFLite并集成到Android应用
  • QCS6490实战:Yolov8n模型量化部署与实时视频流推理优化
  • 精打细算用AI:手把手教你估算gpt-4o-mini API调用成本(附Python计算脚本)
  • Python GDAL实战:遥感影像(TIF/IMG)金字塔(Overviews)的高效管理与优化
  • Apollo Cyber RT框架入门:从编译到节点管理的完整指南
  • Spring with AI (): 搜索扩展——向量数据库与RAG(上)伎
  • Qoder 专家团模式发布:Harness Engineering 的产品化实践
  • 开源可审计|AnythingtoRealCharacters2511模型权重结构解析与安全使用建议
  • 从无人机航拍到手机扫描:聊聊SfM技术如何让消费级设备玩转三维重建
  • 【实战指南】RedHat8环境下MySQL8的完整部署与远程访问配置
  • 保姆级教程:手把手教你为小智AI(ESP32-S3)更换专属唤醒词和背景图
  • C#异步编程实战:用async/await提升你的应用程序性能
  • 大卫小东(Sheldon)难