从 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" 是您物品的实际类型。
有没有办法从已知的 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" 是您物品的实际类型。