错误:无法将 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

我该如何解决它?

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

您已将方法指定为扩展方法,因此出于示例的目的,您可以忽略方法声明上的第一个参数。

因此,您唯一关心的参数是第二个参数,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()上下文。

相关文章: