В сообщении here я узнал, как построить динамический запрос, используя отложенное выполнение Linq. Но на самом деле запрос использует конкатенацию AND условия WHERE.
Как я могу достичь того же запроса, но с логикой ИЛИ?
В связи с перечислением Flags запрос должен искать имя пользователя, имя пользователя Windows или обоих:
public User GetUser(IdentifierType type, string identifier)
{
using (var context = contextFactory.Invoke())
{
var query = from u in context.Users select u;
if (type.HasFlag(IdentifierType.Username))
query = query.Where(u => u.Username == identifier);
if (type.HasFlag(IdentifierType.Windows))
query = query.Where(u => u.WindowsUsername == identifier);
return query.FirstOrDefault();
}
}