PredicateBuilder を使用して動的 Where 句を作成し、DataTable からデータをクエリします。検索する必要がある列名と値を含む Dictionary があります。キーが列名と一致する場合は、辞書を反復処理しているだけで、そのキーと値を述語に追加します。実際のクエリがデータテーブルに対して実行されるまで、すべてが正常に機能しているように見えますが、レコードが返されません:(しかし、動的述語を 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();
}
どんな助けでも大歓迎です:)