生成其中从使用字符串数组子句包含SQL Server

问题描述:

关键字我有这样的字符串:生成其中从使用字符串数组子句包含SQL Server

"bottle 750 green" 

该字符串具有每次可变数目的单词的。我需要的,在此基础上字符串创建:

CONTAINS(descr_en,'"*bottle*" and "*750*" and "*green*"') 

我会那么为了得到理想的结果附加至where子句上的SQL语句。

如何创建生成的包含子句?

我已经试过这样:

var str = "mara 750 bottle"; 
    string[] strarr = str.Split(' '); 
    var result = ""; 
    foreach (var s in strarr) 
    { 
     result += "\"*" + s + "*\"" + " AND "; 
    } 

这给了我:"*mara*" AND "*750*" AND "*bottle*" AND这几乎是我所需要的。

我从上面唯一需要的是摆脱了培训“以及” ...

我更喜欢基于LINQ如果可能的话干净的解决方案。 ?

//This is not literally suitable. 
foreach(string s in samplestring.Split(' ')) 
{ 
    yourstringbuilder.append(" and *"); 
    yourstringbuilder.append(s); 
    yourstringbuilder.append("*"); 
} 

*/

编辑:基于

string.Join(" AND ", "mara 750 bottle".Split(' ').Select (s => string.Format("\"*{0}*\"", s))) 

"*mara*" AND "*750*" AND "*bottle*"

/*为什么不建立自己的CONTAINS子句对于已编辑的问题 - 只是result = result.remove(result.Length - " AND ".Length);你的循环后

+0

我更新了我的问题,因为我觉得我在做什么,你说什么,但我需要摆脱的结局和... – e4rthdog 2013-03-26 09:49:53

这是一个相当干净的方法。

public string BuildContainsClause(string filter) 
{ 
    var keywords = filter 
     .Split(' ') 
     .Select(e => string.Format("\"*{0}*\"", e)); 

    return string.Format("CONTAINS(descr_en,'{0}')", string.Join(" AND ", keywords)); 
} 

用法:

var contains = BuildContainsClause("bottle 750 green"); 
// contains = "CONTAINS(descr_en,'\"*bottle*\" AND \"*750*\" AND \"*green*\"')"