C# 创建linq表达式作为参数

C# 创建linq表达式作为参数,c#,.net,linq,C#,.net,Linq,我使用存储库模式设计 和我的项目中的实体框架 以下是Remository类中的方法: public virtual IEnumerable<T> Find(Expression<Func<T, bool>> predicate) { return Entities.Where(predicate); } 但在这一行: public void deleteItem(int sensorId, UnitOfWork unitOfWork) 我得到这个错

我使用存储库模式设计

和我的项目中的实体框架

以下是Remository类中的方法:

public virtual IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
{
    return Entities.Where(predicate);
}
但在这一行:

public void deleteItem(int sensorId, UnitOfWork unitOfWork)
我得到这个错误:

cannot convert from 'int' to 'System.Linq.Expressions.Expression<System.Func<SensorObservation.Data.SensorsMeasure, bool>>' SensorObservation.Model
无法从“int”转换为“System.Linq.Expressions.Expression”SensorObservation.Model

如何为Find()方法编写参数,该方法从SensorUnitId为5的表中获取所有记录。

获得异常的原因是
Find
方法需要一个谓词表达式作为参数,而您尝试在
delete item
中使用
Find
传递整数。所以,你需要这样写:

public void deleteItem(int sensorId, UnitOfWork unitOfWork)
{
     sensorId=5;
     var items = unitOfWork.SensorsMeasure.Find(sm => sm.Id == sensorId);            
}  
此外,您会注意到,
sm.Id
应该根据EF模型中Id属性的名称进行替换


顺便说一句,在用c#命名方法时,使用camel case不是一个好的做法。尝试使用
DeleteItem
而不是
DeleteItem
。另外,不确定是否需要将UnitOfWork类的实例作为参数直接注入
deleteItem
方法。考虑把它传递到一个类的构造函数中,这个类实现了<代码> DeleTeMod OD/COM>。< /P>你正在寻找的是代码> lambda表达式< /代码>。此外,值得添加最近添加到C#的
本地函数。这样会更有效率和可读性
public void deleteItem(int sensorId, UnitOfWork unitOfWork)
{
     sensorId=5;
     var items = unitOfWork.SensorsMeasure.Find(sm => sm.Id == sensorId);            
}