使用String.Join构建Linq到SQL ContainsTable搜索条件

时间:2012-05-15 13:28:23

标签: string linq-to-sql

我正在使用SQL Server UDF来允许我在Linq to SQL中使用CONTAINSTABLE。

我正在使用字符串数组和正则表达式将用户的搜索字符串拆分为可识别的单词,然后将字符串数组重新组合成符合CONTAINSTABLE语法的搜索条件字符串。

我想让用户能够用引号括住短语。换句话说,如果用户输入'黄色'蓝绿色“'搜索条件应该是'黄色OR'蓝绿色”'在给定以下代码的情况下,最好的处理方法是什么。

IEnumerable<string> keywords = Regex
    .Matches(search, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
    .Cast<Match>()
    .Select(m => m.Groups["match"].Value)
    .ToList();

string searchCondition = "";
searchCondition = String.Join(" OR ", keywords);

List = from t1 in List
    join fts in _dc.udfSearchContent(searchCondition)
    on t1.ContentID equals fts.ContentID
    select t1;

谢谢!

1 个答案:

答案 0 :(得分:0)

.Select(x => @"""" + x + @"""")可以解决问题。

IEnumerable<string> keywords = Regex
    .Matches(search, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
    .Cast<Match>()
    .Select(m => m.Groups["match"].Value)
    .ToList();

string searchCondition = "";
searchCondition = String.Join(" OR ", keywords.Select(x => @"""" + x + @""""));

List = from t1 in List
    join fts in _dc.udfSearchContent(searchCondition)
    on t1.ContentID equals fts.ContentID
    select t1;