Если я вас правильно понимаю, у вас есть метод, который получает отфильтрованный набор данных на основе значений переданных параметров. Но вы хотите сделать параметры необязательными, поэтому, если пользователь хочет данные для всех объектов, онине передал бы entityId
.
Если это так, то вы можете сделать аргументы необязательными, указав для них значение по умолчанию в сигнатуре метода. Затем мы можем проверить, имеет ли аргумент значение по умолчанию, и если он есть, не применять этот фильтр;в противном случае примените его.
Мы можем сделать это, выполнив .Where(x => argHasDefaultValue || someFilter)
. Это работает, потому что если аргумент имеет значение по умолчанию, то вторая часть ||
игнорируется.
Например:
public static List<Objects.Logs.GenericLog> GetLogs(int entityId = int.MinValue,
int logLevelId = int.MinValue, DateTime startDate = default(DateTime),
DateTime endDate = default(DateTime))
{
using(var db = CORAContext.GetCORAContext())
{
return db.GenericLog
.Where(i => startDate == default(DateTime) || i.LogDateTime >= startDate)
.Where(i => endDate == default(DateTime) || i.LogDateTime <= endDate)
.Where(i => entityId == int.MinValue || i.EntityId == entityId)
.Where(i => logLevelId == int.MinValue || i.LogLevelId == logLevelId)
.Select(i => new Objects.Logs.GenericLog
{
EntityId = i.FkEntityId,
LogSourceCode = i.FkLogSourceCode,
LogLevelId = i.FkLogLevelId,
LogDateTime = i.LogDateTime,
LogId = i.PkLogId,
Message = i.Message
}).ToList();
}
}