C# 创建linq表达式作为参数
我使用存储库模式设计 和我的项目中的实体框架 以下是Remository类中的方法: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) 我得到这个错
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);
}