我正在使用 PredicateBuilder 创建一个动态 Where 子句来从 DataTable 中查询数据。我有一个字典,其中包含我需要搜索的列名和值。我只是在字典上进行迭代,如果键与列名匹配,则将该键和值添加到谓词中。在对数据表运行实际查询之前,一切似乎都正常,我得到零记录:(但是如果我用 p => p["Year"] == "2010" 之类的东西替换动态谓词,我得到记录回来。这是代码:
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();
}
任何帮助将不胜感激:)