我正在使用动态返回模型对象的dapper,我想将其配置为'跳过' null字段。
例如:
[0]: {DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO}
我希望Dapper返回
[0]: {DapperRow, Type = 'PHYS', State = CO}
这在功能上类似于JSON。Net的'NullValueHandling设置'功能。
这是可能的,而不改变底层SQL查询?
这样做的好处是减少了从Dapper的结果集序列化并返回到API客户端的JSON对象的大小。
(这是一个不同于这个问题,因为我使用的是动态模型类)
底层类型DapperRow实现了IDictionary,因此您可以强制转换到该接口并使用remove函数。下面的扩展方法在我的测试中运行良好:
public static class DapperRowExtensions
{
public static IEnumerable<dynamic> RemoveNullParams(this IEnumerable<dynamic> rows)
{
foreach (var row in rows)
{
var item = (IDictionary<string, object>)row;
foreach (var key in item.Keys.ToList())
{
if (item[key] == null)
item.Remove(key);
}
}
return rows;
}
}
然后在查询的结果上使用它:
var result = connection.Query("SELECT...");
return result.RemoveNullParams();