错误:无法将 lambda 表达式转换为类型“int”,因为它不是委托类型
本文关键字:类型 因为 int lambda 表达式 错误 转换 | 更新日期: 2023-09-27 18:30:47
这是源代码(我正在使用CodeSmith工具):
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
我该如何解决它?
您已将方法指定为扩展方法,因此出于示例的目的,您可以忽略方法声明上的第一个参数。
因此,您唯一关心的参数是第二个参数,int pKProgramID
。
当您调用此方法(最近)时,它需要一个 int,但您传递的是一个 lambda 委托 ( p => p.PKProgramID == pKProgramID
)
而且,正如Raymond Chen在他的评论中暗示的那样,你的方法是递归的,所以你可能会有进一步的痛苦!
没有内置的基于谓词的删除。您必须使用:
table.DeleteAllOnSubmit(table.Where(p => p.PKProgramID == pKProgramID));
或者因为我们假设 PK 是唯一的:
var record = table.SingleOrDefault(p => p.PKProgramID == pKProgramID);
if(record != null) table.DeleteOnSubmit(record);
当然,您还需要在某些时候SubmitChanges()
上下文。