2012-04-11 27 views
5

Este es el código fuente (estoy usando CodeSmith Herramientas):Error: No se puede convertir la expresión lambda al tipo 'int' porque no es un tipo de delegado

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

estoy recibiendo este error:

Cannot convert lambda expression to type 'int' because it is not a delegate type C:\Projects\New\EAccreditation.Data\Queries\ProgramsExtensions.Generated.cs

¿Cómo puedo solucionarlo?

+8

Um, ¿realmente quiso decir que su método sería recursivo? –

+0

... ¡y ese es el motivo del error! @RaymondChen ponlo como respuesta y estarás + 1d –

+0

Yo trabajo para CodeSmith Tools ... ¿Cuál es el tipo de p.PKProgramID? ¿Estás obteniendo algún otro error de compilación? Consulte esto para obtener más información: http://community.codesmithtools.com/Template_Frameworks/f/66/t/10974.aspx –

Respuesta

6

Ha estipulado su método como un método de extensión, por lo que para los fines de su ejemplo, puede ignorar el primer parámetro en la declaración del método.

Por lo tanto, el único parámetro que le preocupa es el segundo, int pKProgramID.

Cuando se llama a este método (recuirsively) espera un int, pero se están pasando un delegado lambda (p => p.PKProgramID == pKProgramID)

Y, como Raymond Chen dio a entender en su comentario, su método es recursivo, lo que puede tener más dolor delante de ti!

+1

por supuesto, ** si ** hubo una sobrecarga en alguna parte de la tabla.Eliminar (predicado), entonces el código estaría bien –

0

No hay una eliminación basada en predicados incorporada. Usted tiene que utilizar:

table.DeleteAllOnSubmit(table.Where(p => p.PKProgramID == pKProgramID)); 

o desde que asumimos el PK es único:

var record = table.SingleOrDefault(p => p.PKProgramID == pKProgramID); 
if(record != null) table.DeleteOnSubmit(record); 

Usted, por supuesto también es necesario SubmitChanges() del contexto en algún momento.

+0

Gracias chicos, Desafortunadamente, si estoy ignorando el primer parámetro en la declaración del método, estoy recibiendo: "El nombre 'tabla' no existe en el contexto actual" Y realmente necesito la expresión p => p.PKProgramID == pKProgramID Cualquier idea ... Gracias de nuevo –

+0

@Dobo No entiendo el comentario: No sugerí cambiar la firma, y ​​no entiendo su "Y realmente lo necesito ..." - desde que usé exactamente eso en ambos ejemplos –

+0

Eliminar en este caso es un método de extensión. –

Cuestiones relacionadas