空检查Linq Where表达式中的String.ToLower

乔治·塔科斯(George Taskos)

我有这种方法

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的最佳方法是什么?

乔治·塔科斯(George Taskos)

不幸的是,目前我无法使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章