我使用存储库模式设计。
我项目中的实体框架。
以下是Remository类的方法:
public virtual IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
{
return Entities.Where(predicate);
}
在这一行中,我从SensorsMeasure表中获取SensorUnitId为5的所有行:
public void deleteItem(int sensorId, UnitOfWork unitOfWork)
{
sensorId=5;
var items = unitOfWork.SensorsMeasure.Find(sensorId);
}
但是在这一行:
public void deleteItem(int sensorId, UnitOfWork unitOfWork)
我收到此错误:
cannot convert from 'int' to 'System.Linq.Expressions.Expression<System.Func<SensorObservation.Data.SensorsMeasure, bool>>' SensorObservation.Model
如何为Find()方法编写参数,该方法从SensorUnitId为5的表中提取所有记录。
答案 0 :(得分:3)
你获得exeception的原因是你的Find
方法需要一个谓词表达式作为参数,而你试图在Find
中使用delete item
传递整数。所以,你需要写这样的东西:
public void deleteItem(int sensorId, UnitOfWork unitOfWork)
{
sensorId=5;
var items = unitOfWork.SensorsMeasure.Find(sm => sm.Id == sensorId);
}
此外,您注意到,sm.Id
应根据EF模型中您的Id属性的名称进行替换。
PS:AFAIK,在c#中命名你的方法时,使用驼峰的情况不是一个好习惯。请尝试DeleteItem
而不是deleteItem
。此外,不确定是否需要将UnitOfWork类的实例作为参数直接注入deleteItem
方法。考虑将其传递给类的构造函数,该类实现deleteMethod
。