【问题标题】:adding where based on the search options in linq根据 linq 中的搜索选项添加位置
【发布时间】:2012-01-12 20:18:41
【问题描述】:

我必须根据所选条件实现搜索,我要根据搜索条件添加 where 子句,但我的查询总是返回代码的 else 语句,无法确定我哪里出错了,我的代码低于任何帮助非常感谢

DateTime myDate = System.DateTime.Now.Date;
    if (ddlUpdateOptions.SelectedValue == "1")
    {
        myDate = System.DateTime.Now;
    }
    if (ddlUpdateOptions.SelectedValue == "7")
    {
        myDate = System.DateTime.Now.AddDays(-7);
    }
    if (ddlUpdateOptions.SelectedValue == "15")
    {
        myDate = System.DateTime.Now.AddDays(-15);
    }
    if (ddlUpdateOptions.SelectedValue == "30")
    {
        myDate = System.DateTime.Now.AddDays(-30);
    }
    if (ddlUpdateOptions.SelectedValue == "60")
    {
        myDate = System.DateTime.Now.AddDays(-60);
    }
    using (mydatacontext db = new mydatacontext ())
    {
        var query = from b in db.JobSeekers
                    join c in db.JobContents on b.industryId equals c.JobContentid
                    join d in db.JobSeekerBasicEducations on b.BasicEduID equals d.BasicEduId
                    join f in db.JobSeekerMasterEdus on b.MasterEduID equals f.MasterEduId
                    join g in db.JobSeekerDoctarateEdus on b.DoctorateEduID equals g.DoctarateEduId
                    orderby b.UpdatedDate descending
                    select new
                    {
                        b.regId,
                        b.CurrentLocation,
                        b.CurrentEmployer,
                        b.MobileNumber,
                        b.ExpYears,
                        b.ExpMonths,
                        TotalExperience = b.ExpYears,
                        b.profileHeadlines,
                        b.KeySkills,
                        b.DownloadResume,
                        b.industryId,
                        b.UpdatedDate,
                        b.BasicEduID,
                        b.MasterEduID,
                        b.DoctorateEduID,

                    };
        if (txtKeyword.Text != "")
        {
            query = query.Where(c => c.KeySkills.Contains(txtKeyword.Text));
        }
        if (txtLocation.Text != "")
        {
            query = query.Where(c => c.CurrentLocation.Contains(txtLocation.Text));
        }
        if (ddlExperienceMax.SelectedValue != "-Select-")
        {
            query = query.Where(c => c.ExpYears <= Convert.ToInt32(ddlExperienceMax.SelectedValue));
        }
        //if (txtEmployer.Text != "")
        //{
        //    query = query.Where(c => c.CurrentEmployer.Contains(txtEmployer.Text));
        //}
        if (ddlIndustry.SelectedValue != "-Select-")
        {
            query = query.Where(c => c.industryId == Convert.ToInt32(ddlIndustry.SelectedValue));
        }
        if (ddlUpdateOptions.SelectedValue != "")
        {
            query = query.Where(c => c.UpdatedDate.Date < myDate.Date);
        }
        if (ddlEducation.SelectedValue != "-Select-")
        {
            query = query.Where(c => c.BasicEduID == Convert.ToInt32(ddlEducation.SelectedValue));
        }
        if (ddlMasters.SelectedValue != "-Select-")
        {
            query = query.Where(c => c.MasterEduID == Convert.ToInt32(ddlMasters.SelectedValue));
        }
        if (ddlDoctorate.SelectedValue != "-Select-")
        {
            query = query.Where(c => c.DoctorateEduID == Convert.ToInt32(ddlDoctorate.SelectedValue));
        }
        if (chkWithResumes.Checked)
        {
            query = query.Where(c => c.DownloadResume != "");
        }
        if (query.Count() > 0)
        {
            lblMessage.Text = "Search Results";
            gvSearchResults.DataSource = query;
            gvSearchResults.DataBind();
        }
        else
        {
            lblMessage.Text = "Your Search Yielded 0 Results. Please Modify/Broden your Search.";
            gvSearchResults.DataSource = "";
            gvSearchResults.DataBind();
        }

    }

【问题讨论】:

  • 您是否尝试过 SQL 跟踪以查看实际执行了什么?如果这是 LINQ-to-SQL,您只需设置 db.Log = Console.Out
  • 我刚刚尝试过,但是console.out没有显示结果,比较日期时有什么问题

标签: c# asp.net linq dynamic where


【解决方案1】:

使用 IntelliTrace 实现对数据库的最后一次查询执行,然后对其进行调试或 在每次查询分配后获取 query.ToList() 并对其进行调试。

【讨论】:

  • 我已经检查过了,但它并在 sqlserver 中运行查询,即使在 sqlserver 中它返回 0 行,我比较日期的方式是否正确?我对此很困扰
  • 我不知道,这取决于您的搜索条件和您的数据,一旦忽略date where子句并再次调试它以了解问题是否是日期。
  • 我在一开始就发现我正在做的一件事加入,我选择了行业 ID,然后删除了剩余的加入,然后它给出了预期的结果。你知道如何动态绑定连接吗?
  • "如何动态绑定join?"你什么意思?
  • 对不起,我的意思是根据如下条件动态添加连接 if (ddlIndustry.SelectedValue != "-Select-") {query=query.join(.....); query = query.Where(c => c.industryId == Convert.ToInt32(ddlIndustry.SelectedValue)); }
猜你喜欢
  • 1970-01-01
  • 2013-04-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多