小编dau*_*ash的帖子

LINQ - Refactor.包含IEnumerable <string>的比较,区分大小写

我觉得应该是一个相当简单的linq问题.我正在进行字符串比较,使用的Contains是区分大小写的行为,我需要它不区分大小写.我知道这样做的正确方法是使用IndexOfStringComparison.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)

c# linq entity-framework contains

2
推荐指数
1
解决办法
1503
查看次数

标签 统计

c# ×1

contains ×1

entity-framework ×1

linq ×1