【发布时间】:2013-07-11 21:39:33
【问题描述】:
我尝试用谷歌搜索找到解决方案,但我得到的只是完全不相关的结果或涉及二维数组的结果,比如这里的一个: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 的递增值连接到 em> @ 动态编译占位符值的符号。)
以上所有方法都可以正常工作,但后来,我必须使用类似的东西(只是我不知道在运行之前我需要多少参数):
foreach (var row in db.Query(searchQueryString, searchTerms[0]))
{
@row.occurences
}
(澄清: 我需要一些额外的参数(即,除了 searchQueryString 参数)等于项目的数量在 searchTerms 列表AND中,它们必须引用正确的索引(有效地从最低到最高依次引用每个索引,当然,用逗号分隔。 )
此外,我当然需要使用递增值来引用列表的适当索引,如果我什至可以做到那么远,我也不知道该怎么做。我可以为此使用i++ 吗?
我知道 C# 很强大,但也许我要求的太多了?
【问题讨论】:
-
只是一个评论,你可能已经考虑过了,哎呀,这甚至可能是最后的手段。但是……这听起来太笼统了。这是某种通用数据层吗?你确定这不会是其中之一,“希望我没有那样做”有点像在某个地方的轨道上。也许这一切都被考虑过了,我只是想提供帮助,仅此而已。有一些很棒的 ORM 可以更好地完成所有这些工作。
-
@Mark 首先,感谢您的考虑。我永远不会也永远不会(在未来的任何时候)对“陷阱”感到满意!时刻,因此非常欢迎您的建议,但是,这是一种“不得已”的事情(主要是因为 WebMatrix 附带的 SQL Server CE 不支持全文索引)。话虽如此,但我确实不知道什么是 ORM。
-
意味着您的查询可以用 LINQ 而不是 SQL 编写。如果是 EF,您将使用实现 IQueryable 的对象。您可以使用与现在几乎相同的方式向 where 子句添加位,但方式要好得多。然后,当您执行 ORM 时,会根据您设置 IQueryable 的方式为您编写实际的 SQL 查询。希望这会有所帮助。
-
@Mark 不幸的是,我对 LINQ 了解不多。我需要 SQL 的 ORDER BY 子句的强大功能(虽然,如果 LINQ 有非常相似的东西,我不会感到惊讶)。
标签: c# asp.net sql webmatrix asp.net-webpages