2017-03-27 2 views
0

Ich habe eine Textbox, Button und Gridview; Ich möchte in mehreren Spalten suchen. Es funktioniert aber natürlich nur im letzten Fall und ignoriert die oben genannten, also brauche ich etwas, wenn irgendein Fall existiert Wert in meiner Datenbank wird es filtern. Was soll ich tun, um es zu ermöglichen? Das ist mein Code.Suche mit linq

protected void btn_search_Click(object sender, EventArgs e) 
{ 
    Item item = new Item(); 

    //Search by item_name 
    using (SupermarketEntities1 DB = new SupermarketEntities1()) 
    { 
     item.item_name = txt_search.Text; 

     itemGridView.DataSource = DB.Items.Where(x => x.item_name .Contains(item.item_name)) 
      .Select(x =>new { 
        x.item_id, 
        x.item_name, 
        x.item_unit, 
        x.Department.depart_name, 
        x.prod_date, 
        x.exp_date, 
        x.sale_price, 
        x.purchase_price, 
       }).ToList(); 
     itemGridView.DataBind(); 
    } 

    //Search by item_unit 
    using (SupermarketEntities1 DB = new SupermarketEntities1()) 
    { 
     item.item_unit = txt_search.Text; 

     itemGridView.DataSource = DB.Items.Where(x => x.item_unit.Contains(item.item_unit)) 
      .Select(x => new { 
       x.item_id, 
       x.item_name, 
       x.item_unit, 
       x.Department.depart_name, 
       x.prod_date, 
       x.exp_date, 
       x.sale_price, 
       x.purchase_price, 
      }).ToList(); 
     itemGridView.DataBind(); 
    } 

    //Search by sale_price 
    using (SupermarketEntities1 DB = new SupermarketEntities1()) 
    { 
     item.sale_price = Convert.ToDecimal(txt_search.Text); 

     itemGridView.DataSource = DB.Items.Where(x => x.sale_price == item.sale_price) 
      .Select(x => new 
      { 
       x.item_id, 
       x.item_name, 
       x.item_unit, 
       x.Department.depart_name, 
       x.prod_date, 
       x.exp_date, 
       x.sale_price, 
       x.purchase_price     
      }).ToList(); 
     itemGridView.DataBind(); 
    } 

Antwort

1

Operator gesucht sind die logische oder Betreiber: ||

In Ihrer .Where() Klausel, würden Sie, wenn einer der Werte übereinstimmen überprüfen. Etwas wie folgt aus:

DB.Items.Where(x => 
    x.item_name.Contains(item.item_name) || 
    x.item_unit.Contains(item.item_unit) || 
    x.sale_price == item.sale_price) 

So bauen Sie Ihre item Objekt aber Sie müssen, dann haben eine einzelne LINQ-Abfrage mit all den Vergleichen in einem einzigen.Where() Klausel und stellen die Ergebnisse dieser Abfrage Ihre Datenquelle.

+0

es funktioniert, aber das gleiche Problem, wenn x.sale_price == item.sale_price) Fall existiert So habe ich es hashed und es funktioniert gut – hazem