Trouble with PredicateBuilder

本文关键字:PredicateBuilder with Trouble | 更新日期: 2023-09-27 17:57:23

我在使用 PredicateBuilder 将"Or Where"子句动态添加到 LINQ 语句时遇到问题。我将首先解释我试图完成的任务。

我有一个倒排索引,用于存储一堆链接标题中的关键字。我正在使用一个,所以我可以根据这些关键字快速搜索这些链接。倒排索引的类型为

Dictionary<string, List<VerifiedUrl>>

因此,基本上每个单词都与包含该单词的URL列表相关联。

我所处的下一阶段是使倒排索引可搜索。因此,当我搜索"蓝色"时,我返回了与键"the"或"blue"相关的所有链接。经过几次Google搜索,将"Or Where"子句动态添加到LINQ语句的最佳方法似乎是通过PredicateBuilder类。我在使用已构建的谓词的最后一步时遇到问题。

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);

我在 上收到错误。其中语句。将鼠标悬停在 .其中显示"无法从用法推断类型参数。尝试准确指定类型参数。

我尝试更改:

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

Trouble with PredicateBuilder

问题

。其中参数必须是 Func,但 PredicateBuilder.Or 返回 Expression<.。>>.试试这个

test = invertedIndex.Where(predicate.Compile());
相关文章:
  • 没有找到相关文章