我正在使用dapper与动态返回模型对象,我想将其配置为'skip'字段为null。
例如,而不是:
[0]: {DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO}
我想让Dapper回来
[0]: {DapperRow, Type = 'PHYS', State = CO}
这在功能上类似于JSON.Net的'NullValueHandling设置'功能。
这是否可以在不改变底层SQL查询的情况下实现?
好处是减少从Dapper的结果集序列化的(最终)JSON对象的大小,并返回到API客户端。
(这是不是一个不同的问题这一个 ,因为我使用的动态模型类)
底层类型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();