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