【发布时间】:2009-05-21 13:51:01
【问题描述】:
我将很快开始一个简单的数据存储和搜索项目。基本上,其中之一是“将我巨大的 Excel 电子表格放入数据库,为其构建 Web GUI,并使其可搜索”类型的东西。
困扰我的一件事是用户输入某些条件时将使用的实际搜索逻辑。我正在想象一个带有文本字段的搜索界面,以及一些其他过滤工具 - 下拉组合框和复选框等。
虽然这让我可以非常强大、精细地控制我可以执行的过滤,但我想知道 SO 对实际执行搜索的想法是什么。我将在这里使用 ASP.NET、MS SQL Server 和 Linq-To-SQL,因此请记住这些技术。
在我的脑海中,我想我会做这样的事情:
var results = from s in db.Stuff
where (s.Prop1.Contains(textFilter) ||
s.Prop2.Contains(textFilter) ||
s.Prop3.Contains(textFilter)) &&
checkbox1.IsChecked ?
s.Prop4.ToLower().Equals(combobox1.Text) : true
select s;
这是我所知道的:
- 必要时如何进行分组和加入
- 我可以对单个属性使用 Contains() 方法来生成 SQL LIKE 查询
- 我可以逐个属性过滤事物,构建我的搜索逻辑如上。
这就是我要问的:
- 有没有一种方法可以搜索所有属性(无需将所有对象拉入内存——我认为这意味着通过反射构建每个对象的属性列表,将它们字符串化,然后检查出来)?如果没有,这似乎非常麻烦,因为我必须为我可能添加的每个新属性构建新逻辑。像上面的 s.Contains(textFilter) 这样的东西是理想的。
- SQL LIKE 查询实际上是如何工作的?这是我想做的事吗?
- 是否有实现搜索规则的标准方法,例如用于完全匹配的带引号的字符串和逻辑运算符(例如 AND 和 OR)?如果每个实现它们的应用程序都使用自定义解析逻辑这样做,我会感到惊讶。
- 我是不是找错树了?我错过了什么吗?
【问题讨论】:
标签: asp.net sql-server linq-to-sql search