2010-04-18 107 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