我最近几天有困扰我的问题。
我需要使用组合框和文本框过滤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";
}
}
答案 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语句,因为已经设置了变量。
很抱歉不是解决方案,但可能会为您缩减代码:)