1

我正在尝试做一个搜索引擎,比如这里的stackoverflow。我需要选择包含任何选定标签的所有行。

桌子

RowID    Question    Tags
  1        'who'     'C#'
  2       'what'     'SQL'
  3       'where'    'C#,PHP'
  4       'when'     'PHP,SQL'

string[] myTags=new string{"c#","PHP'};

然后我的 sql select 语句是这样的

Select * from table where Tags like myTags[]

我希望有这样的结果

RowID    Question    Tags
  1        'who'     'C#'
  3       'where'    'C#,PHP'
  4       'when'     'PHP,SQL'

当然我知道这在语法上是不正确的,这就是我在这里的原因。

4

2 回答 2

2

林克版本:

myTable.Where(x=>myTags.Contains(x.Tag));

Sql 版本:

Select * from table where Tag in {'c#','SQL','PHP'}

如果一个项目可以有太多标签,你应该稍微改变一下你的数据库设计(添加关系表),让一个包含太多标签的字符串不是一个好方法。

更新: 对于您当前的数据库示例,您可以使用 linq 执行此操作:

myTable.Where(x=>myTags.Any(y=>x.Tags.Contains(y)));
于 2012-05-09T18:01:54.937 回答
0

您反对进行多个 SQL 调用吗?如果不是,您可以执行一个 for 循环来为您的标签数组中的每个项目运行查询?

于 2012-05-09T18:01:34.330 回答