在小巧的查询中传递字段名称

Pass field name in dapper query

我正在创建一个函数,用于检查是否在数据库中检查了维护日。每列都是 Maintenance + DayName(MaintenanceSunday、MaintenanceMonday 等)。

似乎无论何时您传入一个对象,它都想获取正在检查的内容的值,而不是 "inject" 字符串。有没有办法安全地实现这一点(即不是 String.Format("where {0} = ...", field))?我真的不想在这里打开 SQL 注入的可能性(尽管有一个早期的检查来查看 q.ToUpper() 是否在 "SUNDAY"、[=20 的列表中=], 等所以我想有那个保障)

我尝试过这个,但它试图将 'Maintenancesunday' 与 true(位)进行比较:

string field = "Maintenance" + q; // q = "sunday"
return conn.Query<Data>("SELECT * FROM Data WHERE @Field = @Value", new { Field = field, Value = true }).ToList();

Dapper 仅使用 ADO.NET,它不支持参数化列名称。我猜你需要一些硬编码来完成这个。