这可能是一个愚蠢的问题,但在这里。就此而言,我希望能够从从数据库 VARCHAR 列或任何字符串解析的字符串动态构造谓词 < T >。例如,假设数据库中的列包含以下字符串:
return e.SomeStringProperty.Contains("foo");
这些代码/字符串值将存储在数据库中,知道通用“e”的可能属性是什么,并且知道它们必须返回一个布尔值。然后,在一个神奇、奇妙、奇幻的世界中,代码可以在不知道谓词是什么的情况下执行,例如:
string predicateCode = GetCodeFromDatabase();
var allItems = new List<SomeObject>{....};
var filteredItems = allItems.FindAll(delegate(SomeObject e) { predicateCode });
或 Lambda 化:
var filteredItems = allItems.FindAll(e => [predicateCode]);
我知道它可能永远不会这么简单,但是有没有办法,也许使用 Reflection.Emit,从文本动态创建委托代码并将其提供给 FindAll < T > (或任何其他匿名/扩展)方法?