我尝试用谷歌搜索找到解决方案,但我得到的只是完全不相关的结果或涉及二维数组的结果,就像这里的一个:http: //social.msdn.microsoft.com/Forums/vstudio/en-US/bb4d54d3 -14d7-49e9-b721-db4501db62c8/how-does-one-increment-a-value-in-a-two-dimensional-array,这不适用。
说我有这个声明:
var db = Database.Open("Content");
var searchTerms = searchText.Split('"').Select((element, index) => index % 2 == 0 ? element.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) : new string[] { element }).SelectMany(element => element).ToList();
int termCount = searchTerms.Count;
(注意: 您真正需要知道的searchTerms
是,它保存了用户在搜索栏中键入的许多搜索词。LINQ 表达式所做的所有事情就是确保将 qoutes 中包含的文本视为单个搜索词。为了这个问题的目的,实际上没有必要知道所有这些。)
然后我编译了(使用 for 循环来循环searchTerms
列表中的每个项目)一个用作SELECT
SQL 查询的字符串。
这是一个示例,它显示了使用@0, @1, etc.
占位符编译此字符串的一部分,以便我的查询被参数化。
searchQueryString = "SELECT NULL AS ObjectID, page AS location, 'pageSettings' AS type, page AS value, 'pageName' AS contentType, ";
for (int i=0; i<termCount; i++)
{
if(i != 0)
{
searchQueryString += "+ ";
}
searchQueryString += "((len(page) - len(replace(UPPER(page), UPPER(@" + i + "), ''))) / len(@" + i + ")) ";
}
searchQueryString += "AS occurences ";
(注意: 关于上述代码,您真正需要了解的只是我将 的递增值连接 i
到 @
符号以动态编译占位符值。)
以上所有方法都可以正常工作,但后来,我必须使用一些类似的东西(只是我不知道在运行之前我需要多少参数):
foreach (var row in db.Query(searchQueryString, searchTerms[0]))
{
@row.occurences
}
(为了澄清: 我需要一些额外的参数(即除了参数之外 searchQueryString
)等于 searchTerms
列表中的项目数并且它们必须引用正确的索引(有效地引用从最低到最高的每个索引,按顺序,当然用逗号分隔。)
此外,我当然需要使用递增值来引用列表的适当索引,如果我什至可以做到那么远,我也不知道该怎么做。我可以i++
以某种方式使用吗?
我知道 C# 很强大,但也许我要求太多了?