Запрашивать все совпадающие значения из базы данных на основе списка многовыборных списков

#c# #asp.net-mvc #entity-framework #linq

#c# #asp.net-mvc #entity-framework #linq

Вопрос:

У меня есть multiselectlist, который возвращает список значений, я хочу получить данные из базы данных, которая обрабатывает все выбранные идентификаторы,

Например: если пользователь выбрал (RequestIdStatus=[1,2,3]), я хочу получить данные из базы данных, где RequestIdStatus равен 1,2 и 3

Вот моя ViewModel:

 public class ReportViewModel
{
   
    public string RequestCode { get; set; }

    public string RequestDate { get; set; }
    public string ComplaintIdType { get; set; }
    public string ComplaintAgainstIdType { get; set; }

    public List< WorkflowStatus> RequestIdStatus { get; set; } // النتيجة
    
}
  

Моя модель:

 public class RequestModel
{
   
    public long RequestCode { get; set; }

    public DateTime RequestDate { get; set; }

    public DateTime RequestExpireDate { get; set; }

    public WorkflowStatus RequestIdStatus { get; set; }
}
  

мой класс WorkFlowStatues;

 public enum WorkflowStatus
{
    [EnumMember]
    New = 1,
    [EnumMember]
    JusticeWritingUnderProccessing = 2,
    [EnumMember]
    JusticeWritingReply = 3,
}
  

Подтверждение:

 public ActionResult GeneratingReports(ReportViewModel Report)
{
    var RequestReport = _requestServices.GetRequetsForReport().Where(c =>

      c.RequestIdStatus == Report.RequestIdStatus
    ).Select(c => new ReportViewModel
    {
        RequestCode = c.RequestCode.ToString(),
        RequestDate = DateHelper.ConvertGregorianToUmAlQura(c.RequestDate, "dd / MM / yyyy"),
        ComplaintIdType = AppCache.ComplaintTypeName(c.ComplaintIdType),
        ComplaintAgainstIdType = AppCache.ComplaintAgainstTypeName(c.ComplaintAgainstIdType),
        RequestStatus = AppCache.RequestStatusName(c.RequestIdStatus),
        RequestResult = AppCache.RequestRName(c.RequestIdResult),
        AgencyDocumentationEmployeeId = _requestServices.GetUserFullNameById(c.AgencyDocumentationEmployeeId)
    }).ToList();

    string ReportJson = JsonConvert.SerializeObject(RequestReport);
    return Content(ReportJson);

}
  

Список RequestIdStatus правильно отправлен в контроллер, но я хочу установить правильное условие для возврата данных для всех выбранных идентификаторов в этой строке:

  c.RequestIdStatus == Report.RequestIdStatus
  

Я получил эту ошибку:

 Operator "==" cannot be applied to operands of type "WorkflowStatues" and "List<WorkflowStatues>"
  

Комментарии:

1. Каков тип данных c.RequestIdStatus ?

2. это перечисление WorkflowStatus, которое принимает числа 1,2,3

Ответ №1:

Обновите свое Where условие, как показано ниже. Поскольку ваш Report.RequestIdStatus есть List<WorkflowStatus> и c.RequestIdStatus есть WorkflowStatus , вы можете проверить с помощью .Contains .

 .Where(c => Report.RequestIdStatus.Contains(c.RequestIdStatus))
  

Комментарии:

1. У меня это не сработало, оно вернет данные, если я выбрал только один элемент из выпадающего списка