5

これはソース コードです (私は CodeSmith Tools を使用しています):

public static int Delete(this System.Data.Linq.Table<EAccredidation.Data.Programs> table, int pKProgramID)
{
    return table.Delete(p => p.PKProgramID == pKProgramID);
}

このエラーが発生しています:

デリゲート型 C:\Projects\New\EAccreditation.Data\Queries\ProgramsExtensions.Generated.cs ではないため、ラムダ式を 'int' 型に変換できません

どうすれば修正できますか?

4

2 に答える 2

6

メソッドを拡張メソッドとして規定したため、例の目的のために、メソッド宣言の最初のパラメーターを無視できます。

したがって、関心のある唯一のパラメータは 2 番目のint pKProgramIDです。

このメソッドを (再帰的に) 呼び出すと、int が必要になりますが、ラムダ デリゲートを渡しています ( p => p.PKProgramID == pKProgramID)

そして、レイモンド・チェンが彼のコメントでほのめかしたように、あなたの方法は再帰的であるため、あなたの前にさらなる苦痛があるかもしれません!

于 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 に答える