这是源代码(我正在使用CodeSmith Tools):
public static int Delete(this System.Data.Linq.Table<EAccredidation.Data.Programs> table, int pKProgramID)
{
return table.Delete(p => p.PKProgramID == pKProgramID);
}
我收到此错误:
无法将lambda表达式转换为'int'类型,因为它不是委托类型C:\ Projects \ New \ EAccreditation.Data \ Queries \ ProgramsExtensions.Generated.cs
我该如何解决?
答案 0 :(得分:6)
您已将方法规定为扩展方法,因此出于示例的目的,您可以忽略方法声明中的第一个参数。
因此,您唯一关注的参数是第二个int pKProgramID
。
当你调用这个方法(recuirsively)时,它需要一个int,但你传递一个lambda委托(p => p.PKProgramID == pKProgramID
)
而且,正如Raymond Chen在评论中暗示的那样,你的方法是递归的,所以你可能会有更多的痛苦!
答案 1 :(得分:0)
没有内置的基于谓词的删除。你必须使用:
table.DeleteAllOnSubmit(table.Where(p => p.PKProgramID == pKProgramID));
或者因为我们假设PK是唯一的:
var record = table.SingleOrDefault(p => p.PKProgramID == pKProgramID);
if(record != null) table.DeleteOnSubmit(record);
在某些时候,您当然还需要SubmitChanges()
上下文。