我正在努力做一个字符串同情如下:
var nDetails = listOfServiceUrls.Where(x => String.Equals(x.Description,
serviceName,StringComparison.InvariantCultureIgnoreCase));
但是获得例外,
System.ArgumentException:为调用方法'Boolean Equals(System.String,System.String,System.StringComparison)'提供的参数数量不正确
如果我删除where子句,它就可以正常工作!!
var nDetails = listOfServiceUrls.Where(x => String.Equals(x.Description,serviceName));
答案 0 :(得分:3)
您必须使用实体框架或类似技术,这些技术实际上需要解释作为Where
方法的参数提供的表达式。它只会翻译一小部分基类库(标准.NET lib)方法及其重载。
将光标悬停在代码编辑器中的listOfServiceUrls
变量上,看看它是什么类型。我的钱是IQueryable<string>
{而不是IEnumerable<string>
)。
EF似乎在Equals(string, StringComparison)
上有实例System.String
方法的翻译,因此您可以按如下方式重写代码:
var nDetails = listOfServiceUrls.Where(
x => x.Description.Equals(serviceName, StringComparison.InvariantCultureIgnoreCase));
与.NET不同,如果集合中的任何字符串恰好是NullReferenceException
,那么不会看到NULL
- 因为谓词将由SQL Server执行为与.NET运行时相反。
答案 1 :(得分:0)
根据Linqpad的说法,它完美无缺......:
List<string> listOfServiceUrls = new List<string>{"one","two","three"};
var nDetails = listOfServiceUrls.Where(x => String.Equals(x,
"Two",StringComparison.InvariantCultureIgnoreCase));
nDetails.Dump();
返回:two
。
删除忽略大小写将不返回任何内容(显然,Two != two
。