包含列表太慢,如何改进?

San*_*der 5 c# linq list

我有一个对象列表,我希望将其减少到仅包含在单独列表中的属性的对象.

List1是简单字符串的列表.

List2是包含两个字符串属性的对象列表; A和B.

应删除List1中不存在A B的所有项目.

这个过程非常依赖于时间,需要尽可能快.目前我有以下实施方案;

var List1 = new List<String>() {"Around", "9000", "strings"}; //List of about 9000 strings
var List2 = databaseList.ToList(); //Around 2.5 million objects

var reducedList = new HashSet<Object>();            
foreach (var item in List2)
{
    if(List1.Contains(item.A) && List1.Contains(item.B))
    {
        reducedList.Add(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

此过程大约需要7秒钟才能完成,这对我目前的要求来说太慢了.

我尝试使用LINQ运行它,但是给出相同的结果,大约7秒.

var reducedList = List2.Where(r => List1.Contains(r.A)).Where(r => List1.Contains(r.B)).ToList();
Run Code Online (Sandbox Code Playgroud)

有什么建议我可以做些什么来改善这个?

编辑: 我无法在SQL方面做到这一点,因为我需要比较的9000个字符串不能"翻译"成SQL查询,但会超过我们允许的允许2100输入参数SQL Server安装程序.

And*_*iuc 0

正如 @Ondrej Svejdar 所指出的,如果databaseList来自 EntityFramework,那么您不应该调用ToList(),因为它会进行数据库查询,返回 250 万条记录

var reducedList = databaseList
                 .Where(r => List1.Contains(r.A) && List1.Contains(r.B))
                 .ToList();
Run Code Online (Sandbox Code Playgroud)

另外,如果List1来自数据库(我希望 9000 是手动构建的一个大数字),则考虑使用join运算符。