当从数据库提取时,我想用特定的方式处理null值,如下所示:
/// <summary>
/// Implemented this because the Linq Sum() method does not fit our requirements for handling null values:
/// 1. Empty or null source should return a null, not zero
/// 2. If non-empty, and all elements are null, then return null, not zero
/// 3. If non-empty, and some elements are null, ignore them
public static decimal? NullableSum(this IEnumerable<decimal?> source)
{
if (source == null || source.Count() == 0) return null;
decimal? sum = null;
foreach (var v in source)
{
if (v != null)
{
if (sum == null)
{
sum = 0;
}
sum += v;
}
}
return sum;
}
我如何将其通用化?
我强烈怀疑:
public static decimal? NullableSum(IQueryable<decimal?> source)
{
return source.Sum();
}
由于IQueryable
的Sum使用数据库的Sum
,SQL Server的Sum
执行您想要的操作;开箱即用";。这样做还有一个好处,即不会通过导线传递所有数据(您当前的代码就是这样做的(。
显然,编写此方法是不必要的-您可以直接调用内置的Sum
鉴于该功能是内置的,因此不需要";一般化";它-因为它已经在那里,随时可以使用。