2010-06-28 95 views
0

如何查詢某個關鍵字的集合,如「John Doe」,其中某個屬性的值可能是「John M Doe」?做一個包含肯定不會工作,但下面是我的想法。作爲參考的人們是包含具有Name和Description屬性的Person對象的List。用於全文搜索的LINQ查詢

string keyword = "John Doe"; 
var q = from person in people 
     where person.Name.ToLower().Contains(keyword.ToLower()) || person.Description.ToLower().Contains(keyword.ToLower()) 
     select person; 

回答

0

您可以嘗試將搜索詞分爲單詞,然後單獨搜索它們,但這隻會走得太遠 - 它不會處理更復雜的變體。你也許可以制定一個正則表達式,但這也不一定能捕捉到更復雜的情況。

如果您需要的不僅僅是瑣碎的匹配支持,您可能需要查看Lucene.NET,它具有更豐富的比較和搜索功能。 Lucene包含對Linq的一些支持,因此可能允許您維護一些查詢。

+0

鏈路的情況下是破:[新Lucene.net鏈接](http://incubator.apache.org/lucene.net/) – Tr1stan 2011-05-13 09:08:26

1
bool MatchKeywords(string keyWord, string text) { 
    var tokens = keyWord.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries).Select(s=>s.Trim().ToLower()); 
    return tokens.Any(t => text.ToLower().Contains(t)); 
} 


//... 

string keyword = "John Doe"; 

var q = from person in people 
     where MatchKeywords(keyword, person.Name) 
     select person;