【发布时间】:2019-02-23 07:31:33
【问题描述】:
我想通过 1 个 db 调用查找列表和 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.Invitations 中有 100k+ 行。我可以一次调用检查重复的电子邮件(数据库和列表变量中都存在的电子邮件)吗?或者最好的方法是什么?
【问题讨论】:
-
如何定义“重复”、相同的 InterviewId 或相同的 Name 或相同的 Mail 或两者兼而有之?
-
仅限同一电子邮件。
-
它可以通过 1 db 调用来完成,但会非常慢,其中 CandidateEmail 在(1000+ 条记录)。我建议在列表的电子邮件中循环,这意味着 1000+ db 调用,但它更快。
-
是的,它看起来真的很慢。我尝试了@rad 的答案。我在
.Where()之前使用了.AsEnumerable(),这意味着交叉匹配应该发生在内存中。但目前该列表包含 1058 条记录,db 包含 315 行。每次大约需要 9 秒。你能解释一下吗?
标签: c# entity-framework linq