Я не уверен, что я лаю не на то дерево, но я хотел создать функцию, чтобы проверить, существует ли учетная запись на основе всех дополнительных параметров, чтобы ее можно было использовать для получения данных в зависимости от того, что вы хотите для проверки.
В основном запрос должен быть таким: где loginName = p1 или loginName = p2 или loginName = p3, но все параметры являются необязательными, однако по крайней мере один будет предоставлен.
Это то, что я пробовал до сих пор:
public async Task<bool> CheckAccountExistsAsync(string loginName = "", string authenticatorId = "", string eId = "")
{
if (string.IsNullOrWhiteSpace(loginName) && string.IsNullOrWhiteSpace(authenticatorId) && string.IsNullOrWhiteSpace(eId))
throw new InvalidOperationException("You must pass at least one parameter");
return await _context.Accounts.AnyAsync(a =>
(string.IsNullOrWhiteSpace(loginName) || a.LoginName == loginName)
|| (string.IsNullOrWhiteSpace(authenticatorId) || a.AuthenticatorId == authenticatorId)
|| (string.IsNullOrWhiteSpace(eId) || a.EmployeeId == eId));
}
Проблема с этим подходом заключается в том, что если я просто передаю имя входа, то запрос будет выглядеть следующим образом с полностью опущенным условием:
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM [Accounts] AS [a]) THEN CAST(1 AS bit)
ELSE CAST(0 AS bit)
END
Я уверен, что что-то упускаю, есть ли лучший подход?