2013-04-08 77 views
1

我是ASP.Net和LINQ的新手。我正在做一個小項目。它基本上由一個帶有四個文本框的屏幕,一個listview控件和一個帶有一個數據庫表的搜索按鈕組成。使用LINQ和多個「關鍵字」返回結果?

每個文本框都代表某個字段:作者,標題,出版商和價格。我的設想是用戶可以在一個或多個字段中輸入文本並點擊搜索按鈕。然後該程序將返回任何可以找到符合用戶標準的結果。

如果我正在使用SQL語句,我只需選擇與任何輸入字段匹配的每個記錄(即SELECT作者,標題,出版商,價格FROM書籍WHERE ...)。但是,我不太清楚如何使用LINQ來做到這一點。

那麼,有沒有人有我的起點?我已經看到了LINQ的例子有一個字段作爲查詢限制器:

public void SimpleSearch() 
{ 
    DataClasses1DataContext dc = new DataClasses1DataContext(); 

    var q = 
     from a in dc.GetTable<Books>() 
     where a.Title == "1984" 
     select a; 

    dataGridView1.DataSource = q; 
} 

但我似乎無法找到使用超過一個限制器上搜索任何其他的例子。我開始認爲這是不可能的。如果是這樣,有人可以推薦一種不同的方式來完成我想要做的事情嗎?基本上,我只想在表格中搜索與用戶輸入相匹配的字段,並以列表視圖返回結果。任何幫助將不勝感激。

回答

1

我喜歡用含有使搜索一有點更模糊,我也喜歡將所有內容都設置爲小寫,因此在執行搜索時沒有區分大小寫的問題。

public void SimpleSearch() 
{ 
    DataClasses1DataContext dc = new DataClasses1DataContext(); 

    var search = txtSearch.Text.ToLower(); 

var q = 
    from a in dc.GetTable<Books>() 
    where a.Title.ToLower() == search || 
    a.Author.ToLower() == search || 
    a.Author.ToLower().Contains(search) || 
    a.Title.ToLower().Contains(search) 
    select a; 

dataGridView1.DataSource = q; 
} 
+0

請記住,有一些語言/文化ToLower(和ToUpper)可能有問題。參見f.ex.這SO帖子:http://stackoverflow.com/questions/234591/upper-vs-lower-case – larsts 2015-09-02 10:41:28

2

您應該能夠使用||作爲OR分隔符:

public void SimpleSearch() 
{ 
    DataClasses1DataContext dc = new DataClasses1DataContext(); 

    var q = 
     from a in dc.GetTable<Books>() 
     where a.Title == "1984" || a.Author == "Stephen King" || a.Price == 5.99m 
     select a; 

    dataGridView1.DataSource = q; 
} 

您還可以使用&&做一個與搜索,而不是||