至于是什么,我试图完成一个例子匹配的字符串,这里是一些代码,构建出的书籍称为Sentence
的字符串属性的列表。在搜索上的报价短语等关键词
public class Book {
public string Sentence { get; set; }
}
Book book1 = new Book() { Sentence = "The quick brown fox jumps over the lazy dog" };
Book book2 = new Book() { Sentence = "The quick brown frog jumps over the lazy sloth" };
List<Book> books = new List<Book>();
books.Add(book1);
books.Add(book2);
我想通过基于某些用户输入的书籍列表进行搜索(搜索要求不应该比此示例更复杂)。
如果用户提供的quick fox "lazy dog"
搜索短语,然后我就回到它有BOOK1作为集合的成员列表。如果用户提供搜索短语quick fox sloth
,则不应返回任何内容,因为这三个单词不会全部出现在任何属性中。
摘要
quick fox "lazy dog"
- 1结果(在引号词语一起出现,且剩余的词单独地出现)quick fox sloth
- 无结果"lazy sloth"
- 1结果(两个单词一起出现在字符串中)lazy sloth
- 1个结果(这两个词出现在字符串中的个人)
,我目前拥有的代码:
//Turn the search word into an array of words (includes support for quotes phrases). E.g: quick fox "lazy dog" becomes a list of these values: `quick`, `fox`, `lazy dog`.
var searchWords = Regex.Matches(searchWord, @"(?<match>\w+)|\""(?<match>[\w\s]*)""")
.Cast<Match>()
.Select(m => m.Groups["match"].Value)
.ToList();
var query = from b in books
where (!string.IsNullOrEmpty(b.Sentence) && searchWords.Any(b.Sentence.Contains))
select b;
这并不适用于情况2.我的代码工作现在只是寻找1场比赛,如果它获得1场比赛,那么它会考虑找到物品。
感谢您的答复。你完全正确,这是我需要解决我的例子。我可能会考虑Lucene.NET,但是这回答了我的问题。 – 2012-04-24 16:37:29