I have the following query. How can I make it one query with string to be included if its not null or empty
if (!string.IsNullOrWhiteSpace(eventRequestModel.Description))
{
if (eventRequestModel.Severity.Count > 0)
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get(e => e.Description.Contains(eventRequestModel.Description) && eventRequestModel.Severity.Contains(e.Severity.ToString())).Result on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
UTCTimeStamp = ev.TimeStamp,
EventType = ev.EventType,
Description = ev.Description,
PanelName = pnl.Name,
SiteName = job.Name,
ChannelGuid = ev.ChannelGuid,
MapGuid = ev.MapGuid,
Severity = ev.Severity,
LogType = ev.LogType,
Data1 = ev.Data1,
Data2 = ev.Data2,
Data3 = ev.Data3,
Data4 = ev.Data4,
PanelItemType = ev.PanelItemType,
PanelItemId = ev.PanelItemId
}).Take(numOfItems).ToList();
}
else
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get(e => e.Description.Contains(eventRequestModel.Description)).Result on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
UTCTimeStamp = ev.TimeStamp,
EventType = ev.EventType,
Description = ev.Description,
PanelName = pnl.Name,
SiteName = job.Name,
ChannelGuid = ev.ChannelGuid,
MapGuid = ev.MapGuid,
Severity = ev.Severity,
LogType = ev.LogType,
Data1 = ev.Data1,
Data2 = ev.Data2,
Data3 = ev.Data3,
Data4 = ev.Data4,
PanelItemType = ev.PanelItemType,
PanelItemId = ev.PanelItemId
}).Take(numOfItems).ToList();
}
}
else
{
if (eventRequestModel.Severity.Count > 0)
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get(e => eventRequestModel.Severity.Contains(e.Severity.ToString())).Result on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
UTCTimeStamp = ev.TimeStamp,
EventType = ev.EventType,
Description = ev.Description,
PanelName = pnl.Name,
SiteName = job.Name,
ChannelGuid = ev.ChannelGuid,
MapGuid = ev.MapGuid,
Severity = ev.Severity,
LogType = ev.LogType,
Data1 = ev.Data1,
Data2 = ev.Data2,
Data3 = ev.Data3,
Data4 = ev.Data4,
PanelItemType = ev.PanelItemType,
PanelItemId = ev.PanelItemId
}).Take(numOfItems).ToList();
}
else
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get() on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
UTCTimeStamp = ev.TimeStamp,
EventType = ev.EventType,
Description = ev.Description,
PanelName = pnl.Name,
SiteName = job.Name,
ChannelGuid = ev.ChannelGuid,
MapGuid = ev.MapGuid,
Severity = ev.Severity,
LogType = ev.LogType,
Data1 = ev.Data1,
Data2 = ev.Data2,
Data3 = ev.Data3,
Data4 = ev.Data4,
PanelItemType = ev.PanelItemType,
PanelItemId = ev.PanelItemId
}).Take(numOfItems).ToList();
}
Your difference is
join ev in _unitOfWork.Repository<EventLogs>().Get(e => e.Description.Contains(eventRequestModel.Description) && eventRequestModel.Severity.Contains(e.Severity.ToString()))
//^^^^^^^^^^^^^^ Here
You can use ternary operator to avoid if (!string.IsNullOrWhiteSpace(eventRequestModel.Description))
check
Like,
join ev in _unitOfWork.Repository<EventLogs>()
.Get(e =>
string.IsNullOrWhiteSpace(eventRequestModel.Description) ? true : e.Description.Contains(eventRequestModel.Description)
&& eventRequestModel.Severity.Contains(e.Severity.ToString()))
Your entire code will look like,
if (eventRequestModel.Severity.Count > 0)
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get(e => string.IsNullOrWhiteSpace(eventRequestModel.Description) ? true : e.Description.Contains(eventRequestModel.Description)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Your answer is here
&& eventRequestModel.Severity.Contains(e.Severity.ToString())).Result on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
//Your code
}).Take(numOfItems).ToList();
}
else
{
eventsModelList = (from job in _unitOfWork.Repository<Jobs>().Get(j => eventRequestModel.SiteIds.Contains(j.JobId.ToString())).Result
join ev in _unitOfWork.Repository<EventLogs>().Get(e => string.IsNullOrWhiteSpace(eventRequestModel.Description) ? true : e.Description.Contains(eventRequestModel.Description)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Your answer is here
&& eventRequestModel.Severity.Contains(e.Severity.ToString())).Result on job.JobId equals ev.JobId
join pnl in _unitOfWork.Repository<Panels>().Get(el => eventRequestModel.SiteIds.Contains(el.JobId.ToString())).Result on ev.PanelId equals pnl.PanelId
orderby ev.TimeStamp descending, ev.EventId descending
select new EventsModel
{
//Your code
}).Take(numOfItems).ToList();
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.