dau*_*ash 2 c# linq entity-framework contains
我觉得应该是一个相当简单的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)
怎么样:
.Where(x => emailAddresses.Select(y => y.ToLower()).Contains(x.Email.ToLower())
Run Code Online (Sandbox Code Playgroud)
它会将您的所有集合元素更改为小写版本,并尝试在该集合中查找较低版本的用户电子邮件.
你可以选择ToUpper
,它应该没有区别.
如果这是一个LINQ到对象查询,你可能应该使用ToLowerInvariant
,但因为它不是由LINQ支持到实体,你必须使用ToLower
here`
归档时间: |
|
查看次数: |
1503 次 |
最近记录: |