我正在寻找一些关于最佳实践(考虑内存和CPU时间)的建议来处理使用Linq2Sql从存储过程返回的Nullable<T>
字段。
请考虑以下方案和限制:
Nullable<T>
一些默认值。请分享您对处理类似情况的意见或经验。
感谢您的关注。
答案 0 :(得分:2)
最佳解决方案:
不允许SQL返回NULL值。
执行此操作的最简单方法是不允许列本身为null,但如果不可能,则可以在您使用的查询中执行ISNULL(字段,默认值)返回数据。
下一个最佳解决方案:
default(type)
值。没有办法不检查每个值。
答案 1 :(得分:1)
您可以编写扩展方法,例如:
public static string SafeGetString(this SqlDataReader _Reader, int _ColIndex)
{
if (_Reader.IsDBNull(_ColIndex))
return null; //Default value
else
return _Reader.GetString(_ColIndex);
}
对于使用的每种类型(实际上没有那么多),如果要将数据插入到非可空类型中,请将默认值设置为null
以外的其他值。
答案 2 :(得分:0)
硬核选项是在源头合并值。您将保证空值远离数据读取器。
但是由于性能似乎是一个很大的问题,我建议您在破坏代码的完整性(过度优化)或运行时的健全性(滥用内存或CPU)之前,测量不同的选项以做出明智的决定)。
作为旁注,从数据库中获取数百万行肯定会在某处产生明显的影响。你通常必须决定它会在何时/何时受到伤害!