c# - Lambda 或 Linq 方法来搜索多个参数

标签 c# linq lambda

我有一个对象列表,我喜欢用多个参数查询列表以减少搜索页面上的结果。

     int SecLink = (!string.IsNullOrEmpty(Request.QueryString["Sector"])) ? Convert.ToInt32(Request.QueryString["Sector"]) : 0;
        int LocLink = (!string.IsNullOrEmpty(Request.QueryString["Location"])) ? Convert.ToInt32(Request.QueryString["Location"]) : 0;
        int IndLink = (!string.IsNullOrEmpty(Request.QueryString["Industry"])) ? Convert.ToInt32(Request.QueryString["Industry"]) : 0;
        int VacLink = (!string.IsNullOrEmpty(Request.QueryString["Vacancy"])) ? Convert.ToInt32(Request.QueryString["Vacancy"]) : 0;

        string keyword = Request.QueryString["SearchTerm"];

        var dx = new DataX();
        var lstJobs = dx.GetAllJobs().Where(x => x.SectorLink.Equals(SecLink) && x.LocationLink.Equals(LocLink) && x.IndustryLink.Equals(IndLink) && x.VacancyTypeLink.Equals(VacLink) && x.JobName.Contains(keyword)).ToList();

        if (lstJobs.Count > 0)
        {
            uiRptSearchJobs.DataSource = lstJobs;
            uiRptSearchJobs.DataBind();

            uiLitSearchResults.Text = string.Format("<h4>Search result found {0} matches</h4>", lstJobs.Count);
        }

搜索参数可能是“0”,因为没有从上一页中选择,所以结果应该反射(reflect)他的。

这是我传递的查询字符串:

Default.aspx?section=search&Sector=4&Location=0&Industry=0&Vacancy=0&SearchTerm=

但如您所见,它们的查询字符串将随着用户从上一页中选择的内容而改变。

最佳答案

如果我没理解错的话,你是不是不想过滤参数的值为0?如果是这样,两种解决方案:

  1. 在你的条件下检查参数是否等于0:

    var lstJobs = dx.GetAllJobs().Where(x => 
        (SecLink == 0 || x.SectorLink.Equals(SecLink))
        && (LocLink == 0 || x.LocationLink.Equals(LocLink))
        && (IndLink == 0 || x.IndustryLink.Equals(IndLink))
        && (VacLink == 0 || x.VacancyTypeLink.Equals(VacLink))
        && x.JobName.Contains(keyword)).ToList();
    
  2. Linq 天哪,动态构建您的查询:

        var query = dx.GetAllJobs().Where(x => x.JobName.Contains(keyword));
    
        if (SecLink != 0)
        {
            query = query.Where(x => x.SectorLink.Equals(SecLink));
        }
    
        if (LocLink != 0)
        {
            query = query.Where(x => x.LocationLink.Equals(LocLink));
        }
    
        if (IndLink != 0)
        {
            query = query.Where(x => x.IndustryLink.Equals(IndLink));
        }
    
        if (VacLink != 0)
        {
            query = query.Where(x => x.VacancyTypeLink.Equals(VacLink));
        }
    
        var lstJobs = query.ToList();
    

关于c# - Lambda 或 Linq 方法来搜索多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10739993/

相关文章:

C# - 如何在连接到 (RAS) VPN 时获取 IP 地址

c# - 更新在另一个线程中创建的控件?

c# - 有条件地调用 Linq 扩展方法

c# - 使用 linq 将 XML 元素连接到 C# 中的类属性

.net - LINQ-to-SQL 中不区分大小写的字符串比较

amazon-web-services - 使用 API 网关和无服务器框架在 AWS Lambda 上超过了速率

c# - 如何使用 Entity Framework 将 2 个相关对象存储在不同的数据库中

C# 从 Cassandra 计数器表中选择

Java 8 CompletableFuture - 扇出实现

python - python 中的 lambda 列表