Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 带动态模型的简洁ORM-如何不返回字段而不是';字段';=无效的_.net_Orm_Json.net_Dynamic Programming_Dapper - Fatal编程技术网

.net 带动态模型的简洁ORM-如何不返回字段而不是';字段';=无效的

.net 带动态模型的简洁ORM-如何不返回字段而不是';字段';=无效的,.net,orm,json.net,dynamic-programming,dapper,.net,Orm,Json.net,Dynamic Programming,Dapper,我将dapper与动态返回模型对象一起使用,我希望将其配置为“跳过”空字段 例如,而不是: [0]: {DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO} 我想干净利落地回来 [0]: {DapperRow, Type = 'PHYS', State = CO} 这在功能上类似于JSON.Net的“NullValueHandling设置”功能 这是否可以在不改变基础SQL查询的情况下实现 好处是减少从Da

我将dapper与动态返回模型对象一起使用,我希望将其配置为“跳过”空字段

例如,而不是:

[0]: {DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO}
我想干净利落地回来

[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;
    }
}
这听起来不可取;“以空值存在”与“不存在”不同。此外,dapper处理dynamic的方式意味着这并非微不足道。
var result = connection.Query("SELECT...");
return result.RemoveNullParams();