2010-04-18 225 views
0

我基本上希望將搜索查詢綁定到gridview,這很好,但這必須由用戶輸入查詢(有點像搜索功能)來完成。我可以得到單個值和行返回,但我怎麼會得到它來搜索我的數據庫中的所有列輸入的值,並返回它?Linq-to-SQL語句問題

到目前爲止我的代碼是:

Void SearchFunction() 
{ 
    TiamoDataContext context = new TiamoDataContext(); 

    var search from p in context.UserProfiles 
     where p.DanceType == UserSearchString 
     select p; 

    UserSearchGrid.DataSource = search; 
    UserSearchGrid.DataBind(); 
} 

我試圖p.equals但我敢肯定那不是去了解它的方式。

+1

你的意思是「所有列?」你在問如何在數據庫中的每個表的每一列中搜索一個字符串?單個表格的每一列?或者你真的只是試圖搜索一列,因爲目前的查詢似乎建議? – Aaronaught 2010-04-18 21:29:15

+0

ahh我對不清楚的道歉是的,單個表格中的每一列都是正確的......目前最新的錯誤是它沒有檢查單個表格中的所有列只是DanceType列。 – Anicho 2010-04-18 21:34:02

回答

1

如果你想要它搜索表中的每一列,那麼你必須告訴它搜索表中的每一列。

var search = 
    from p in context.UserProfiles 
    where 
     p.DanceType == UserSearchString || 
     p.Foo == UserSearchString || 
     p.Bar == UserSearchString 
    select p; 

就是這樣。沒有魔術師會自動完成(不可能有 - 某些列甚至可能不是字符串)。

請記住,這可能會非常慢,因爲查詢優化器將無法選擇能夠處理整個查詢的單個索引。

另外,這個「搜索」只測試純粹的平等。您可能需要分別使用StartsWithContains作爲前綴或子字符串搜索。

3

它看起來像您的查詢sytax是有點關閉。它應該看起來像:

var search = from p in context.UserProfiles 
      where p.DanceType == UserSearchString 
      select p; 

既然你想查詢多個列,你將不得不鏈您正在尋找列在名與or的:

var search = from p in context.UserProfiles 
      where p.DanceType == UserSearchString || 
       p.Name == UserSearchString || 
       p.SomeOtherStringColumn == UserSearchString 
      select p; 

或者,如果你想使用的lambda語法:

var search = context.UserProfiles.Where(p => p.DanceType == UserSearchString || 
       p.Name == UserSearchString || 
       p.SomeOtherStringColumn == UserSearchString); 

請記住,使用這兩種方法意味着p.DanceTypestring型。

+0

謝謝,我正試圖在一張表中搜索所有列,並想知道如何去做這件事,但是很不清楚:)。 – Anicho 2010-04-18 21:36:18

+0

p.column.ToString()是我將用來修復字符串類型的東西,沒有複雜的東西存儲,所以它不是一個問題....謝謝你或我不能肯定,如果這是合法的語法:) – Anicho 2010-04-18 21:47:56