检索lambda表达式的值

时间:2016-01-28 14:08:13

标签: linq lambda expression

我有这个功能:

public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> exp1, Expression<Func<TSource, bool>> exp2, Expression<Func<TSource, bool>> exp3)
    {


    }

我使用这样的函数:

adverts.WhereIf(x=>x.DeactivatedDate.HasValue, x => x.DeactivatedDate.Value > starDateTime, x => x.ModifiedDate > starDateTime);

我如何获得exp1的值?

1 个答案:

答案 0 :(得分:1)

  

在extenssion我需要知道DeactivatedDate.HasValue是否为真

您可以评估表达式,但需要TSource的实例进行评估。由于您的“输入”是TSource的集合,因此您的解决方案可能类似于:

foreach(TSource t in source)
{
    bool isTrue = exp1.Compile()(t);  //  evaluate exp1 for this item
    if(isTrue)
        // do something
    else
        // do something else
} 

但请注意您的回复类型为IQueryable<TSource> - 所以我不确定您是否已完全考虑如何构建生成的查询......