带有动态模型的 Dapper ORM - 如何返回不字段而不是"字段"= NULL?



我正在使用动态返回模型对象的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();

相关内容

  • 没有找到相关文章

最新更新