我们如何使用Predicate <t>参数

时间:2017-03-11 10:05:30

标签: c# predicate

如何解析方法实现中的内容Predicate<T>参数?例如,我有这个方法:

public static List<MyEntity> Find(Predicate<MyEntity> filters)

当我使用这个方法时,我将一些谓词(即:filters.Name == "xyz")传递给方法。我希望能够确定表达式,即能够从中生成SQL。

1 个答案:

答案 0 :(得分:1)

如您所知,Preidcate<T>表示采用类型T的参数并返回bool值的方法。要使用它,只需将其视为一种方法。

以下是一个例子:

var entity = <get an entity some where>;
if (filters(entity)) {
    // entity satisfies the predicate
}

从您的方法的名称和签名判断,您似乎想要找到满足谓词的所有实体。也许是这样的:

var list = new List<Entity>();
foreach (var entity in <get all entities>) {
    if (filters(entity)) {
        list.Add(entity)
    }
}
return list;
  

我想要解释它。

不,你不能解释谓词中的内容,谓词是一个委托。代表是黑匣子。代表的来电者不需要知道代表实际做了什么。如果你真的想知道它的用途,请使用表达式树,但我想在这种情况下应该使用Predicate