【发布时间】:2012-01-12 19:19:43
【问题描述】:
我有两种表达方式:
public static Expression<Func<int, bool>> IsDivisibleByFive() {
return (x) => x % 5 == 0;
}
和
public static Expression<Func<int, bool>> StartsWithOne() {
return (x) => x.ToString().StartsWith("1");
}
我想创建一个同时适用于两者的新表达式(相同的表达式在我的代码中以不同的组合使用):
public static Expression<Func<int, bool>> IsValidExpression() {
return (x) => IsDivisibleByFive(x) && StartsWithOne(x);
}
然后做:
public static class IntegerExtensions
{
public static bool IsValid(this int self)
{
return IsValidExpression().Compile()(self);
}
}
在我的代码中:
if (32.IsValid()) {
//do something
}
我有很多这样的表达式,我想定义一次,而不是到处重复代码。
谢谢。
【问题讨论】:
-
您为什么首先使用表达式而不仅仅是委托?
-
添加了更多细节,但基本上我的第三个代码块实际上不起作用,这就是“我希望我能做到的理论上的方式”。现在我必须手动创建一个新方法来返回前两个组合的表达式,然后我必须在我的代码库中分别维护它们。
-
这是另一个帖子的副本:[组合两个表达式][1] [1]:stackoverflow.com/questions/457316/…
-
@svick:我想保留它们的表达式,以便 linq-to-sql 也可以翻译它们以针对数据库执行。这个想法是我定义了一次表达式,然后我可以选择将大部分相同的表达式用于数据库查询和 linq-to-objects。
-
这能回答你的问题吗? Expression<Func<object, bool>> as Property
标签: c# linq lambda expression