我正在使用PredicateBuilder创建一个动态的Where子句来查询DataTable中的数据。我有一个包含我需要搜索的列名和值的字典。我只是迭代字典,如果关键字匹配列名称,然后将该关键字和值添加到谓词。一切似乎工作正常,直到对数据表运行实际查询,我得到零记录:(但如果我用p => p [“年”] =“2010”替换动态谓词,我得到记录回到下面的代码:PredicateBuilder返回零记录
var objectList = table.AsEnumerable();
Func<DataRow, bool> predicate = GetPredicate(parms, table.Columns);
var list1 = objectList.Where(predicate).ToList();
private static Func<DataRow, bool> GetPredicate(Dictionary <string, string> parms, DataColumnCollection dataColumnCollection)
{
var predicate = PredicateBuilder.False<DataRow>();
foreach (var parm in parms)
{
if (dataColumnCollection.Contains(parm.Key))
{
var copy = parm;
predicate = predicate.And(p => p[copy.Key] == copy.Value);
}
}
return predicate.Compile();
}
任何帮助,将不胜感激:)
可能的重复[为什么此代码与PredicateBuilder不工作?](http://stackoverflow.com/questions/5302382/why-is-this-code-with-predicatebuilder-not-working) –
@AhmadMageed这是一个完全不同的问题。 – svick
@AhmadMageed我在添加键值和临时变量之前将它们包含在谓词中,没有帮助:( –