(from a in this._addresses
where (a.Street ?? "").Contains(street) || (a.StreetAdditional ?? "").Contains(streetAdditional)
select a).ToList<Address>()
from a in this._addresses
where (a.Street != null && a.Street.Contains(street)) || (a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional))
select a).ToList<Address>()
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> pSeq)
{
return pSeq ?? Enumerable.Empty<T>();
}
from a in this._addresses
where a.Street.Contains(street) ||
a.StreetAdditional.EmptyIfNull().Contains(streetAdditional)
select a).ToList<Address>()
from a in this._addresses
where (a.Street != null && a.Street.Contains(street)) ||
(a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional))
select a).ToList<Address>()
from a in this._addresses
where a.Street.Contains(street) || (a.StreetAdditional != null && a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
street = street ?? "";
streetAdditional = streetAdditional ?? "";
from a in this._addresses
where a.Street.Contains(street) || a.StreetAdditional.Contains(streetAdditional)
select a).ToList<Address>()
9条答案
按热度按时间w1e3prcc1#
我会使用空合并运算符...
yxyvkwin2#
最明显的一条:
或者,你可以为Contains编写一个扩展方法,它接受空参数而不出错。有些人可能会说,拥有这样一个方法并不太好,因为它看起来像一个普通的方法调用,但它允许空值(从而把普通的空检查实践放在一边)。
0mkxixxg3#
您必须先检查
StreetAdditional
是否为null
。尝试
这是因为
&&
是一个 shortcut-operator,如果a != null
的结果为false,则第二个带有null
值的表达式将不会被求值,因为结果将是false
。cqoc49vn4#
我将创建一个扩展方法,如果为null,则返回一个空序列,然后调用contains方法。
mccptt675#
我不认为SqlServer给了你一个空异常。如果它给了,那么这段代码显然不是通过LinqToSql运行的(因为你已经标记了这个问题)。
contains将被转换为sql的
like
,它对空值完全没有问题。ztigrdn86#
检查以确保属性不为空
如果空值检查为false,则&&后面的第二个子句将不会求值。
nmpmafwu7#
anauzrmj8#
您可能需要检查以确保变量street和streetAdditional不为空。我刚刚遇到了同样的问题,将它们设置为空字符串似乎解决了我的问题。
tktrz96b9#
需要注意的一点是,应首先计算null。
()