У меня есть такие таблицы в моей базе данных, как 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