c# - 如何在 Dapper.NET 中添加动态搜索值

标签 c# dapper micro-orm

我正在使用 Dapper.NET 开发采购订单搜索功能。用户可以按发票号和购买日期进行搜索。

如果用户在文本框中填写发票号,它将按发票号搜索,
如果用户填写发票号和购买日期,它会根据发票号和购买日期进行搜索,
如果用户填写购买日期,它将按购买日期搜索

因此,查询:

string query = "SELECT PurchaseDate, InvoiceNo, Supplier, Total FROM PurchaseOrder WHERE 1 = 1";

if (!string.IsNullOrEmpty(purchaseOrder.InvoiceNo))
{
    query += " AND InvoiceNo = @InvoiceNo";
}
if (purchaseOrder.PurchaseDate != DateTime.MinValue)
{
    query += " AND PurchaseDate = @PurchaseDate";
}

return this._db.Query<PurchaseOrder>(sql, ?).ToList();

问题是我不知道如何根据查询条件的数量动态传递值。

最佳答案

简单的选择:包括所有的东西! Dapper 将检查查询并确定哪些显然 是不需要的,然后删除它们 - 仅发送它可以在查询中找到的参数。因此,如果一些查询需要 @foo,一些需要 @bar,一些需要两者,一些不需要,那么只需:

int foo = ...
string bar = ...
...Query<ResultType>(sql, new { foo, bar })...

或者手动执行:查看 DynamicParameters

关于c# - 如何在 Dapper.NET 中添加动态搜索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613437/

相关文章:

c# - 从 SHA1 迁移到 SHA2 ASP.net 4.5,C#

c# - 从 Dapper 结果创建二维数组

c# - 如何在不同的表中写入我的 FK 值? C# | SQLite

c# - PetaPoco - 如何关闭自动增量?

visual-studio-2010 - 如何使用Dapper从数据库生成模型?

.net - 微软有微ORM吗?

c# - 如何通过 COM Interop 在 Excel 中获取特定范围?

c# - 尝试调用有效方法重载时出现奇怪的 "assembly not referenced"错误

c# - 如何检查通用类型 T 是否为 IEnumerable<T'>,其中 T' 未知

c# - CaSTLe.Windsor 使用 Dapper 实例化错误版本的 SqlConnection