我有这种方法
private IList<Order> FilterOrders(string filterText)
{
string filterTextLowerCase = filterText.ToLower();
var filtered = _orders.Where(order =>
order.OrderIdFullOrderNumber.ToLower().Contains(filterTextLowerCase) ||
order.Name.ToLower().Contains(filterTextLowerCase) ||
order.Status.ToLower().Contains(filterTextLowerCase) ||
order.TimeRemaining.ToLower().Contains(filterTextLowerCase) ||
order.Address.ToLower().Contains(filterTextLowerCase) ||
order.City.ToLower().Contains(filterTextLowerCase) ||
order.State.Abbrev.ToLower().Contains(filterTextLowerCase) ||
order.PostalCode.ToLower().Contains(filterTextLowerCase)).ToList();
return filtered;
}
如您所见,属性中可能存在null引用异常,在此Where表达式中检查null的最佳方法是什么?
不幸的是,目前我无法使用C#6.0功能。
我最终创建了一个扩展方法来过滤列表,并与另一个扩展方法Contains进行了比较,该方法接受@ robert-mckee的建议并接受@ jeppe-stig-nielsen的演示,接受一个StringComparison参数。
public static IList<Order> FilterOrders(this IList<Order> orders, string filterText)
{
var filtered = orders.Where(order =>
order.OrderIdFullOrderNumber.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.Name.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.Status.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.TimeRemaining.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.Address.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.City.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.State.Abbrev.Contains(filterText, StringComparison.OrdinalIgnoreCase) ||
order.PostalCode.Contains(filterText, StringComparison.OrdinalIgnoreCase)).ToList();
return filtered;
}
public static bool Contains(this string source, string value, StringComparison comparison)
{
if (string.IsNullOrWhiteSpace(source))
{
return false;
}
return source.IndexOf(value, comparison) >= 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句