我在我的数据库中有这样的表,如Customer
,Member
,Instructor
, Employee
等。这些用户中的每一个都有他的电子邮件地址。我需要检查是否已经有一个给定的电子邮件用户。我在想:检查是否存在多个表中的值
- 检查每个表,像这样:
public bool IsEmailAddressExists(string email)
{
if (!Context.Customers.Any(c => string.Equals(c.Email, email, StringComparison.InvariantCultureIgnoreCase)))
if (!Context.Members.Any(m => string.Equals(m.Email, email, StringComparison.InvariantCultureIgnoreCase)))
...
}
- 选择所有电子邮件和检查:
public bool IsEmailAddressExists(string email)
{
var emails = Context.Customers.Select(c => c.Email).Union(Context.Members.Select(m => m.Email))...; //other unions
return emails.Any(e => string.Equals(e, email, StringComparison.InvariantCultureIgnoreCase));
}
有更多的表和许多用户,所以我想知道什么是最有效的方式来实现这种类型检查。
谢谢。
不要做'select','any'会更有效率。但是我不能看到更多的选择,因为你需要搜索每个表格。如果你真的需要额外的性能,也许你可以像存储过程一样。另一种方法是将所有电子邮件地址存储在一张表中,并将它们与关系关联起来(尽管还有更多的工作) – musefan
@musefan,谢谢你的回答。我想到了两种选择。我会考虑存储过程,并且对于个人电子邮件表 - 我不允许更改数据库模式。 – Zabavsky