2010-06-28 62 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;