Pregunta

Estoy tratando de determinar qué registros eliminar de una base de datos cuando un usuario envía un formulario. La página tiene dos CheckBoxList, uno que representa los registros antes de la modificación y el otro después.

Puedo obtener fácilmente los valores seleccionados que deben eliminarse de esta forma ...

//get the items not selected that were selected before
var oldSelectedItems = from oItem in oldChklSpecialNeeds.Items.Cast<ListItem>()
                       where !(from nItem in newChklSpecialNeeds.Items.Cast<ListItem>()
                               where nItem.Selected
                               select nItem.Value).Contains(oItem.Value)
                           && oItem.Selected
                       select oItem.Value;

ahora estoy tratando de hacer algo como esto pero no lo permite ...

var itemsToDelete = from specialNeed in db.SpecialNeeds
                           join oldSelectedItem in oldSelectedItems on specialNeed.SpecialNeedsTypeCd equals oldSelectedItem.Value
                           where specialNeed.CustomerId == customerId

Puedo usar fácilmente un bucle foreach y un .DeleteOnSubmit () para cada elemento, pero creo que hay una forma de usar la funcionalidad de LINQ y pasar todo el resultado de la consulta de una unión interna a .DeleteAllOnSubmit ()

//like so
db.SpecialNeeds.DeleteAllOnSubmit(itemsToDelete); 

¿Alguna idea?

¿Fue útil?

Solución

Las colecciones locales se pueden usar en LINQ to SQL con el método Contains (). Puede intentar cambiar la cláusula unirse a un donde con Contains ():

var itemsToDelete = from specialNeed in db.SpecialNeeds
                    where oldSelectedItems.Contains(specialNeed.SpecialNeedsTypeCd)
                       && specialNeed.CustomerId == customerId
                    select ...;

Otros consejos

¿Cuál es el error que está recibiendo? ¿Es una falta de coincidencia de tipo entre SpecialNeedsTypeCd y oldSelectedItem.Value? ¿Acaba de omitir la selección en la segunda declaración de Linq en esta publicación o es el problema?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top