PredicateBuilder造成麻烦

| 我在使用PredicateBuilder向LINQ语句动态添加\“或Where \”子句时遇到麻烦。我将首先说明我要完成的工作。 我有一个反向索引,用于存储一堆链接标题中的关键字。我正在使用一个,因此我可以根据这些关键字快速搜索这些链接。倒排索引是类型
Dictionary<string, List<VerifiedUrl>>
因此,基本上每个单词都与包含该单词的URL列表相关联。 我的下一个阶段是使反向索引可搜索。因此,当我搜索\“ theblue \”时,我将返回与键“ the \”或\“ blue \”关联的所有链接。经过几次Google搜索后,似乎通过PredicateBuilder类向LINQ语句中动态添加“或Where”子句的最佳方法是。我在使用我建立的谓词的最后一步遇到了麻烦。
var invertedIndex = new Dictionary<string, List<VerifiedUrl>>();

//the invertedIndex is built and filled here. Now I am trying to search through it.

Console.WriteLine(\"\\nEnter words to see if there are matches\");
string query = Console.ReadLine();
Console.WriteLine();

string[] words = query.Split(\',\', \' \'); 

//the predicate I\'ll be building. I\'m not positive it is of the correct type. I\'ve assumed that it should be of the same type as the Dictionary type in the inverted index
var predicate = PredicateBuilder.False<KeyValuePair<string, List<VerifiedUrl>>>();

foreach (string w in words)
{
    string temp = w;
    predicate = predicate.Or(p => p.Key == temp);
}
//this is the line that generates the syntax error.
test = invertedIndex.Where(predicate);
我在.Where语句中收到错误。将鼠标悬停在.Where上。显示“无法从用法中推断出类型实参。请尝试完全指定类型实参。” 我尝试更改:
var predicate = PredicateBuilder.False<KeyValuePair<string, List<VerifiedUrl>>>();
Expression<Func<KeyValuePair<string, List<VerifiedUrl>>, bool>> predicate = PredicateBuilder.False<KeyValuePair<string, List<VerifiedUrl>>>();
但这没有效果。在错误控制台中,我实际上得到了不同的错误:
Error   1   Instance argument: cannot convert from \'System.Collections.Generic.Dictionary<string,System.Collections.Generic.List<InvertedIndexConsoleApp.VerifiedUrl>>\' to \'System.Linq.IQueryable<System.Collections.Generic.KeyValuePair<string,System.Collections.Generic.List<InvertedIndexConsoleApp.VerifiedUrl>>>\'   c:\\users\\josh\\documents\\visual studio 2010\\Projects\\InvertedIndexConsoleApp\\InvertedIndexConsoleApp\\Program.cs  79  25  InvertedIndexConsoleApp

Error   2   \'System.Collections.Generic.Dictionary<string,System.Collections.Generic.List<InvertedIndexConsoleApp.VerifiedUrl>>\' does not contain a definition for \'Where\' and the best extension method overload \'System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,bool>>)\' has some invalid arguments c:\\users\\josh\\documents\\visual studio 2010\\Projects\\InvertedIndexConsoleApp\\InvertedIndexConsoleApp\\Program.cs  79  25  InvertedIndexConsoleApp
    
已邀请:
.Where参数必须是Func,但是PredicateBuilder.Or返回Expression >的问题。 尝试这个
test = invertedIndex.Where(predicate.Compile());
    

要回复问题请先登录注册