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

标签 c# linq lambda iqueryable .net-core-3.0

有没有办法从已知的 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”是您项目的实际类型。

关于c# - 从 where 子句或 IQueryable/IEnumerable 获取 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57852666/

相关文章:

C# 在 lambda 表达式中声明变量

asp.net - 如果结果集为空,Linq lambda 表达式抛出错误

java - 在封闭范围内定义的局部变量 log 必须是最终的或有效最终的

python - 解决 python 中的 lambda 限制

c# - MS SQL nvarchar id 字段包含空格

c# - Entity Framework 中的级联删除(按类型继承的表)

c# - "Fold"LINQ 扩展方法在哪里?

c# - 是装箱还是拆箱?

c# - 如何在 wpf 中调用 KeyEventArgs 方法

Makecontext 参数 #2 的 C++0x lambda