创建linq表达式作为参数

时间:2017-03-19 10:16:05

标签: c# .net linq

我使用存储库模式设计。

我项目中的实体框架。

以下是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的表中提取所有记录。

1 个答案:

答案 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