2009-12-08 90 views
1

如果我有一個List<string>並希望通過它做一個標準的搜索,我可以使用LINQ聲明是這樣的:LINQ是否有任何支持搜索機器搜索的內置搜索?

(from t in tasks 
where searchTerms.All(term => t.ToUpper().Contains(term.ToUpper())) 
select t).ToList(); 

但是,如果我想支持標準的搜索引擎的語法來處理短語,如:

contract 
contract customer 
jim customer 
"Jim Smith" customer 

然後我要開始我自己的滾動定製搜索方法。此外,作爲Jon Skeet mentioned here,您必須小心與ToUpper()與不同的文化設置進行比較,並且如果您處於Web環境中,則編碼和搜索編碼字符問題有許多問題,等。

是否沒有.NET或LINQ解決方案處理類似搜索機器的搜索,例如而不是Contains()類似於ConstainsSearchTerms()的東西?

回答

0

如果您使用的是LINQ2SQL,則可以使用SqlMethods.Like方法生成LIKE,如在SQL中使用的那樣。

否則LINQ2Objects上,只需使用正則表達式。

關於ToUpper。這是有問題的,更好的解決方案是使用字符串大小寫摺疊,但不幸的是,.NET只支持簡單模式:(

0

這不是LINQ,但你可能想看看Lucene.NET。它實際上是一個搜索引擎,一個相當不錯的。