.net 带动态模型的简洁ORM-如何不返回字段而不是';字段';=无效的
我将dapper与动态返回模型对象一起使用,我希望将其配置为“跳过”空字段 例如,而不是:.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
[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();