C# 查找列表和db表之间的重复项

C# 查找列表和db表之间的重复项,c#,entity-framework,linq,C#,Entity Framework,Linq,我想用1db调用查找列表和db表之间的重复值。该列表包含1000多行,db表包含100k多行。可能吗 列表结构: public class BatchInvitationDto { public List<Candidates> Candidate { get; set; } public string InterviewId { get; set; } } public class Candidates { public string Name { get

我想用1db调用查找列表和db表之间的重复值。该列表包含1000多行,db表包含100k多行。可能吗

列表结构:

public class BatchInvitationDto
{
    public List<Candidates> Candidate { get; set; }
    public string InterviewId { get; set; }
}

public class Candidates
{
    public string Name { get; set; }
    public string Email { get; set; }
}  
public class Invitations
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Interview ID is required")]
    public int InterviewId { get; set; }  

    [Required(ErrorMessage = "Candidate Name is Required")]
    public string CandidateName { get; set; }

    [Required(ErrorMessage = "Candidate Email is Required")]
    public string CandidateEmail { get; set; }

    [StringLength(450)]
    [Index(IsUnique = true)]
    public string Guid { get; set; }

}  
现在列表中有1000多行

BatchInvitationDto batchInvites = new BatchInvitationDto(); 
batchInvites.Candidate  // contains 1000+ rows  

我在db表
context.investments
中有100k+行。我可以在一次通话中检查重复的电子邮件(存在于db和列表变量中的电子邮件)吗?或者最好的方法是什么?

关于电子邮件的副本:

var lst = batchInvites.Candidate.Select(y => y.Email);
db.Invitations
    .Where(x => lst.Contains(x.Email))
    .ToList();

您如何定义“重复”,相同的面试ID或相同的姓名或相同的邮件或两者?仅相同的邮件。可以通过1个db呼叫完成,但速度非常慢,因为候选邮件(1000多条记录)。我建议在列表的电子邮件中循环,这意味着1000+分贝的呼叫,但它要快得多。是的,它看起来真的很慢。我试过@rad的答案。我在
.Where()
之前使用了
.AsEnumerable()
,这意味着交叉匹配应该发生在内存中。但目前该列表包含1058条记录,db包含315行。每次大约需要9秒。你能解释一下吗?一个小错误
.AsEnumerable()
Where()
之前是必需的。但是它真的很慢。@WahidMasud:如果添加AsNumerable,尽管它只通过一个db调用执行查询,但它会将整个邀请表读取到RAM中,这是一个性能问题(这就是为什么它很慢)。但是,如果它是可查询的,它只读取所需的数据,并且仍然只使用一个db调用然后我得到这个错误
无法创建类型Application.Dto的常量值。在这个上下文中只支持基本类型或枚举类型
这个答案解释了@mjwills这个查询将所有1058封电子邮件放在
Where
子句中。从您提供的链接来看,它说最大参数号可以是2100。这就是你指的问题吗?我再次尝试了3175封电子邮件,结果它成功了。Awesome@WahidMasud-我很惊讶它能成功(因为有2100多个参数)。但很高兴听到这样的消息!