过滤LINQ查询

时间:2011-02-17 15:40:29

标签: asp.net linq filtering

我最近几天有困扰我的问题。

我需要使用组合框和文本框过滤LINQ查询。问题是我无法获得结果,我总是得到空的gridview(用于显示过滤的数据)。

任何人都可以帮助我,为什么我根本没有得到任何结果?我检查了调试器,发送到查询的数据是有效的,但是,我不确定“string.Empty”值。

以下是代码:

string naziv, nazivEn, adresa, tel, fax, mob, email, web, oib, tip, mjesto;


        if (chkMjesto.Checked == true)
        {   
                    mjesto = cbMjesto.SelectedItem.Text;
        }
        else
            {
            mjesto = string.Empty;
            }

        if (chkTip.Checked == true)
        {
            tip = cbTip.SelectedItem.Text;
        }
        else
        {
            tip = string.Empty;
        }

        string tema;

        if (chkTema.Checked == true)
        {
            tema = cbTema.SelectedItem.Text;
        }
        else
        {
            tema = string.Empty;
        }

        if (chkAdresa.Checked == true)
        {
            adresa = txtAdresa.Text;
        }
        else
        {
            adresa = string.Empty;
        }

        if (chkTelefon.Checked == true)
        {
            tel = txtTelefon.Text;
        }
        else
        {
            tel = string.Empty;
        }

        if (chkMobitel.Checked == true)
        {
            mob = txtMobitel.Text;
        }
        else
        {
            mob = string.Empty;
        }

        if (chkEmail.Checked == true)
        {
            email = txtEmail.Text;
        }
        else
        {
            email = string.Empty;
        }

        if (chkWeb.Checked == true)
        {
            web = txtWeb.Text;
        }
        else
        {
            web = string.Empty;
        }

        if (chkOIB.Checked == true)
        {
            oib = txtOIB.Text;
        }
        else
        {
            oib = string.Empty;
        }

        if (chkNaziv.Checked == true)
        {
            naziv = txtNaziv.Text;
        }
        else
        {
            naziv = string.Empty;
        }

        if (chkNazivEn.Checked == true)
        {
            nazivEn = txtNazivEn.Text;
        }
        else
        {
            nazivEn = string.Empty;
        }

        if (chkFax.Checked == true)
        {
            fax = txtFax.Text;
        }
        else
        {
            fax = string.Empty;
        }          


        if (rblOrganizator.SelectedItem.Value == "Nije")
        {
            var pretraga = from t in db.tijeloes
                           where t.tijelo_naziv.Contains(naziv) && t.tijelo_adresa.Contains(adresa) && t.tip_tijela.tip_tijela_naziv.Contains(tip) && t.mjesto.mjesto_naziv.Contains(mjesto) 
                           where t.tijelo_telefon.Contains(tel) && t.tijelo_fax.Contains(fax) && t.tijelo_email.Contains(email) && t.tijelo_mob.Contains(mob) && t.tijelo_web.Contains(web) && t.tijelo_oib.Contains(oib) && t.tijelo_naziv_en.Contains(nazivEn)
                           select new { t.tijelo_naziv, t.tijelo_oib,t.tip_tijela.tip_tijela_naziv,t.tijelo_adresa,t.mjesto.mjesto_naziv, t.mjesto.zupanija_drzava.zupanija_naziv};

            gvTijelo.DataSource = pretraga;
            gvTijelo.DataBind();

            if (pretraga.Count() != 0)
            {
                gvTijelo.HeaderRow.Cells[0].Text = "Naziv";
                gvTijelo.HeaderRow.Cells[1].Text = "OIB";
                gvTijelo.HeaderRow.Cells[2].Text = "Tip tijela";
                gvTijelo.HeaderRow.Cells[3].Text = "Adresa";
                gvTijelo.HeaderRow.Cells[4].Text = "Mjesto";
                gvTijelo.HeaderRow.Cells[5].Text = "Regionalni centar";
            }

        }

2 个答案:

答案 0 :(得分:2)

string.Empty似乎是罪魁祸首。我敢打赌,生成的SQL正在检查字段是否包含'',这对于该字段中的数据不太可能。

您最好的选择是在条件之前启动查询,然后在选中相应的复选框后附加位置。

var pretraga = db.tijeloes;
if (chkMjesto.Checked == true)
{   
    pretraga = pretraga.Where(t => t.tijelo_naziv.Contains(cbMjesto.SelectedItem.Text));
}
if (chkTip.Checked == true)
{
    pretraga = pretraga.Where(t => t.tip_tijela.tip_tijela_naziv.Contains(cbTip.SelectedItem.Text));
}
...

pretraga = pretraga.Select(t => new { t.tijelo_naziv, t.tijelo_oib,t.tip_tijela.tip_tijela_naziv,t.tijelo_adresa,t.mjesto.mjesto_naziv, t.mjesto.zupanija_drzava.zupanija_naziv });
// Bind to pretraga.
...

答案 1 :(得分:0)

如果我是你,我会在顶部单独声明所有变量,如

string naziv = string.empty;
string whatever = string.empty;  etc

执行此操作会使代码变小,因为您可以删除else语句,因为已经设置了变量。

很抱歉不是解决方案,但可能会为您缩减代码:)