簡體   English   中英

Linq查詢中包含String。

[英]String.contains in Linq query

我有以下查詢。 如果字符串不是null或為空,如何使它成為包含字符串的查詢

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();
      }

你的區別是

join ev in _unitOfWork.Repository<EventLogs>().Get(e => e.Description.Contains(eventRequestModel.Description) && eventRequestModel.Severity.Contains(e.Severity.ToString()))

                                                      //^^^^^^^^^^^^^^ Here

您可以使用三元運算符來避免if (!string.IsNullOrWhiteSpace(eventRequestModel.Description))檢查

喜歡,

join ev in _unitOfWork.Repository<EventLogs>()
 .Get(e => 
      string.IsNullOrWhiteSpace(eventRequestModel.Description) ? true : e.Description.Contains(eventRequestModel.Description)
      && eventRequestModel.Severity.Contains(e.Severity.ToString()))

您的整個代碼將如下所示:

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();
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM