Dapper ORM与动态模型 - 如何返回没有字段而不是'Field'= NULL?

时间:2014-05-21 16:24:11

标签: .net orm json.net dynamic-programming dapper

我正在使用带有动态返回模型对象的小巧玲珑,我想将其配置为“跳过”'字段为空。

例如,而不是:

[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不同的问题,因为我使用的是动态模型类)

1 个答案:

答案 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();