根据多选列表从数据库中查询所有匹配的值

Posted

技术标签:

【中文标题】根据多选列表从数据库中查询所有匹配的值【英文标题】:Query all the matched values from the database based on a list of multiselect list 【发布时间】:2020-12-08 12:44:47 【问题描述】:

我有一个返回值列表的多选列表,我想从匹配所有选定 ID 的数据库中获取数据,

例如:如果用户选择了(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 列表已正确发布到控制器,但我想设置正确的条件以在此行返回所有选定 id 的数据:

 c.RequestIdStatus == Report.RequestIdStatus

我收到了这个错误:

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

【问题讨论】:

c.RequestIdStatus 的数据类型是什么? 枚举 WorkflowStatus 采用数字 1,2,3 【参考方案1】:

如下更新您的Where 条件。由于您的Report.RequestIdStatusList&lt;WorkflowStatus&gt;c.RequestIdStatusWorkflowStatus,您可以使用.Contains 检查。

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

【讨论】:

这对我不起作用,如果我只从下拉列表中选择一项,它将返回数据

以上是关于根据多选列表从数据库中查询所有匹配的值的主要内容,如果未能解决你的问题,请参考以下文章

如何隐藏下拉列表以及如何从下拉列表中进行多选?

根据具有不同对象的匹配字段从数组列表中删除重复元素

SQL 多选一个字段值只选一次 和多次从表里查询但查的字段较少 相比哪个性能更好?为啥?

正则表达式根据其中的值获取特定匹配括号后的所有内容

比较 ListBox 中的循环结果

Mongoose find - 从查询中返回所有匹配的至少一个