我有一个 lambda 表达式如下:
var obj = data.FirstOrDefault(x => x.id == id && x.city == city.ToLower());
Run Code Online (Sandbox Code Playgroud)
数据是一个列表
我怎样才能做到忽略大小写?
String.Equals(String, StringComparison)是通常首选的方法:
var obj = data.FirstOrDefault(x => x.id == id
&& x.city.Equals(city, StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
但是,如果您的 lambda 将被解释为表达式树(如 EF 到 SQL 的情况),则可能不支持或可能不需要StringComparison 。
在不支持StringComparison 的情况下,您可以.ToLower()对两个操作数执行:
var obj = data.FirstOrDefault(x => x.id == id
&& x.city.ToLower() == city.ToLower());
Run Code Online (Sandbox Code Playgroud)
但请注意,这会在两个操作数上执行该函数,在表达式树中,这可能会对性能产生影响,对于 EF 到 SQL 方案,您应该考虑使用不区分大小写的排序规则,而不是转换列值以使用受影响列上的索引。
String.ToLower()调用者注意事项正如使用字符串的最佳实践
中所述,我们建议您避免调用替换默认值的字符串大小写方法,而应调用需要显式指定参数的方法。若要使用当前区域性的大小写约定将字符转换为小写,请通过使用其区域性参数的值CurrentCulture调用ToLower(CultureInfo)方法重载来显式表明您的意图。如果您不需要语言感知比较,请考虑使用Ordinal。
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |