繁体   English   中英

将Lambda函数转换为Lambda表达式

[英]Converting Lambda Functions into Lambda Expression

我正在尝试将多选和lambda函数组合成一个lambda表达式。 我怎么做? 我知道最后一行是错的,但是让你知道我的意思。

Func<Event, bool> where = null;

if (!string.IsNullOrWhiteSpace(searchToken))
    where = q => q.Name.ToUpper().Contains(searchToken.ToUpper());

where += q => q.Hidden = false;

Expression<Func<Event, bool>> where1 = q => where; <-- Erroring

我怀疑你想要PredicateBuilder (该页面上提供了源代码。)您可以像这样使用它:

var predicate = q => !q.Hidden;
if (!string.IsNullOrWhiteSpace(searchToken))
{
    predicate = predicate.And(q => q.Name.ToUpper()
                                         .Contains(searchToken.ToUpper());
}
return predicate;

那是假设你想“和”条件 - 你从来没有说清楚......

请注意,这不是以不区分大小写的方式进行比较的好方法。 如果您可以告诉我们将使用查询(例如LINQ to SQL,LINQ to EF),我们可以建议一种与提供程序兼容的方法来执行不区分大小写的查询。

请查看http://msdn.microsoft.com/en-us/library/bb882637.aspx 如何使用表达式树来构建动态查询。

AFAIK在使用Expression <>时表达式必须在编译时知道,因为编译器然后构建AST抽象语法三并将其作为数据存储在Expression <>实例中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM