具有动态模型的 Dapper ORM - 如何不返回字段而不是“字段”= NULL?
Posted
技术标签:
【中文标题】具有动态模型的 Dapper ORM - 如何不返回字段而不是“字段”= NULL?【英文标题】:Dapper ORM with dynamic model - How to return no field instead of 'Field' = NULL? 【发布时间】:2014-05-21 16:24:10 【问题描述】:我正在使用带有动态返回模型对象的 dapper,我想将其配置为“跳过”为空的字段。
例如,而不是:
[0]: DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO
我希望 Dapper 回来
[0]: DapperRow, Type = 'PHYS', State = CO
这在功能上类似于 JSON.Net 的“NullValueHandling 设置”功能。
这是否可以在不改变底层 SQL 查询的情况下实现?
好处是减少我的(最终)JSON 对象的大小,该对象从 Dapper 的结果集中序列化并返回给 API 客户端。
(这是与this one 不同的问题,因为我使用的是动态模型类)
【问题讨论】:
这听起来不受欢迎; “以空值存在”与“不存在”不同。此外,dapper 与动态一起工作的方式意味着这不是微不足道的。 【参考方案1】:基础类型 DapperRow 实现了 IDictionary,因此您可以强制转换为该接口并使用删除函数。以下扩展方法在我的测试中运行良好:
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();
【讨论】:
以上是关于具有动态模型的 Dapper ORM - 如何不返回字段而不是“字段”= NULL?的主要内容,如果未能解决你的问题,请参考以下文章