.NET - 如何在一个文本框中有效地搜索数据库中的多个字段?

时间:2014-11-09 16:43:15

标签: c# asp.net linq

搜索linq to sql的例子我用来通过一个文本框搜索DB表中的多个字段:

var TheOutput = (from t in TheDC.SomeTable

                 where TheIDs.Contains(t.ID) && (
                 t.column1.Contains(TheSearchTerm) ||
                 t.column2.Contains(TheSearchTerm) ||
                 t.column3.Contains(TheSearchTerm) )           
                 select t.ID).ToList();
}

但它很慢,因为字段是文本字段(名称,姓氏,电子邮件......)。使用什么策略快速搜索一个文本框?

2 个答案:

答案 0 :(得分:1)

你可以试试这样的东西吗?

var TheOutput = TheIDs.Select(id => TheDC.SomeTable.Find(id)).Where(t => 
    t.column1.Contains(TheSearchTerm) || 
    t.column2.Contains(TheSearchTerm) || 
    t.column3.Contains(TheSearchTerm)
)

答案 1 :(得分:1)

假设字符串包含导致速度减慢,那么值得尝试全文索引。

你需要运行类似的东西:

CREATE UNIQUE INDEX unique_index_on_id ON TheDc.SomeTable(ID);
CREATE FULLTEXT CATALOG ft AS DEFAULT;
CREATE FULLTEXT INDEX ON TheDc.SomeTable(column1, column2, column3) 
   KEY INDEX unique_index_on_id 
   WITH STOPLIST = SYSTEM;

有关详细信息,请参阅MSDN docs

那说使用SQL分析器总是值得的(或者如果你使用EF很棒的EF Profiler from Hibernating Rhinos)来确认生成的SQL符合你的预期