错误:无法将lambda表达式转换为类型'int',因为它不是委托类型

时间:2012-04-11 07:14:32

标签: c#

这是源代码(我正在使用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

我该如何解决?

2 个答案:

答案 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()上下文。