我有这个功能:
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的值?
答案 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>
- 所以我不确定您是否已完全考虑如何构建生成的查询......