我知道担心可能还不够,但是 DBNull.Value.Equals() 检查的性能如何?
public IEnumerable<dynamic> Query(string sql, params object[] args)
{
using (var conn = OpenConnection())
{
var rdr = CreateCommand(sql, conn, args).ExecuteReader(CommandBehavior.CloseConnection);
while (rdr.Read())
{
var e = new ExpandoObject();
var d = e as IDictionary<string, object>;
for (var i = 0; i < rdr.FieldCount; i++)
d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);
yield return e;
}
}
}
特别是,这一行:
d.Add(rdr.GetName(i), DBNull.Value.Equals(rdr[i]) ? null : rdr[i]);
与原始代码(来自 Rob Conery 的 Massive 类)相比:
d.Add(rdr.GetName(i), rdr[i]);
肯定会至少产生很小的影响,同样可能不是真正值得注意的,但我很好奇。转换的原因是因为它更容易在 ASP.NET MVC 视图中测试 null。