从 where 子句或 IQueryable/IEnumerable 获取 lambda 表达式

Get lambda expression from where clause or IQueryable/IEnumerable

有没有办法从已知的 where 子句中获取表达式,然后将其传递给其他 Where(<expression>) 子句?

我正在使用 .NET Core 3.0 预览版和 EF Core 预览版。

包括 linq 和 linq dynamic

public void myFunction ()
{
    var expression = GetAllItems()
                       .Where(x => x.Id == 5 && x.Desc.Contains("foos"))
                       .AwesomeGetExpressioneMagicFunction();
    var res = GenericBeforeSaveValidation(expression);
}

public IQueryable<T> GenericBeforeSaveValidation("delegate/expression" exp)
{
     //some generic stuff before 
     return sourceItems.Where(exp);
}

只需将 lambda 保存在函数变量中并重新使用它:

public void myFunction ()
{
    Expression<Func<ItemType, bool>> expression = x => x.Id == 5 && x.Desc.Contains("foos");
    var items = GetAllItems()
        .Where(expression)
        .ToList();
    var res = GenericBeforeSaveValidation(expression);
}

public IQueryable<ItemType> GenericBeforeSaveValidation(Expression<Func<ItemType, bool>> exp)
{
     //some generic stuff before 
     return sourceItems.Where(exp);
}

"itemType" 是您物品的实际类型。