有些.NET方法使用StringComparison作为参数,有些使用StringComparer(通常采用IComparer的形式).差异很明显.有一些优雅的方法如何从StringComparer获取StringComparison,反之亦然?
我总是可以编写使用Case语句的简单方法,但也许.NET中已经出现了我正在忽略的东西.
我觉得应该是一个相当简单的linq问题.我正在进行字符串比较,使用的Contains是区分大小写的行为,我需要它不区分大小写.我知道这样做的正确方法是使用IndexOf带StringComparison.OrdinalIgnoreCase参数的方法重载.
问题是我挂起的对象IndexOf(emailAddresses)是一个字符串的枚举,因此没有IndexOf可用的.我也试过emailAddresses.Contains(x.Email, StringComparer.InvariantCultureIgnoreCase但它抛出了这个错误:
LINQ to Entities无法识别方法'Boolean Contains [String](System.Collections.Generic.IEnumerable 1 [System.String],System.String,System.Collections.Generic.IEqualityComparer 1 [System.String])'方法
我如何重构这个以使该.Where(x => emailAddresses.Contains(x.Email)部分不区分大小写?
public IList<string> FindInvalidEmails(UserContext userContext, IEnumerable<string> emailAddresses)
{
var validEmails = new List<string>();
emailAddresses.ForEachChunk(100, emailAddressesChunk =>
validEmails.AddRange(_enterpriseRepositoryFactory.GetMemberRepository(userContext.EnterpriseId).FindAll()
.Where(x => emailAddresses.Contains(x.Email) && !x.IsDeleted)
.Select(x => x.Email)
.ToList())
);
return emailAddresses.Except(validEmails).ToList();
}
Run Code Online (Sandbox Code Playgroud)