c# - 具有两个通用方法输入参数的表达式函数
问题描述
我想整合这个表达
Expression<Func<Customer, string, bool>> paramCompareFunc = (cust, name) => cust.Company == name;
为了这
private bool IsUnique<Entity>(DbSet<Entity> set,
string param,
Expression<Func<Entity, string, bool>> paramCompareFunc)
where Entity : class
{
var query = set.Where(paramCompareFunc); // how I can pass param to expression?
// var query = set.Where(paramCompareFunc(param)); // error here
...
如何将第二个参数传递给表达式?
我想为不同的实体定义不同的比较表达式(它们没有任何相同的名称字段),并有可能将此表达式传递给我的通用函数。
解决方案
“简单”的方法是通过更改您的 api 以使用工厂方法来构建Expression
您实际需要的;
Expression<Func<Customer, bool>> GetCompareFunc(string name) => (cust) => cust.Company == name;
虽然您可以使用ReplacingExpressionVisitor
常量交换 name 参数,但这会对性能产生负面影响。
推荐阅读
- javascript - 动态改变一个js文件的src
- indexing - 公式 - 单元格值匹配结果为 Concat 公式
- java - 如何为我的 Spring 应用程序接收或保存的任何 Temporal 字段、参数或表单元素设置全局验证?
- html - HTML,有序列表中的标题
- flutter - 在不丢失本地数据的情况下更新 Android 应用程序
- selenium - 移动仿真不适用于 Chrome 版本 78.0.3904.97
- html - 删除带有日期输入的 vuetify v-text 字段上的向下箭头
- c++ - 有没有办法复制派生类指针的向量而不将其转换为基类?
- android - 以下项目选项已弃用并已删除:空
- c++ - 与 cmake 铿锵。target_include_directories "没有这样的文件或目录"