5

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

我该如何解决?

4

2 回答 2

6

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

因此,您唯一关心的参数是第二个参数int pKProgramID.

当您调用此方法时(递归),它需要一个 int,但您传递的是一个 lambda 委托 ( p => p.PKProgramID == pKProgramID)

而且,正如 Raymond Chen 在他的评论中暗示的那样,你的方法是递归的,所以你可能会有更多的痛苦!

于 2012-04-11T07:28:41.503 回答
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()在某些时候了解上下文。

于 2012-04-11T07:32:52.937 回答