2010-09-17 18 views
6

Estoy construyendo un widget de encuesta. Tengo 2 tablas, llámalas Encuestas y Encuestas completadas. Necesito hacer una consulta de linq para obtener todas las encuestas que no existen para un usuario dado en PollsCompleted.Linq-to-sql ¿No contiene o no está incluido?

tengo los siguientes conjuntos:

Por Encuestas Dónde activo == true

Para PollsCompleted Dónde UserId == ThisUserId Dónde PollId = Polls.Id

Ahora tengo que conseguir todas las encuestas que no existen en PollsCompleted. Necesito un ejemplo para esto usando una o varias consultas. Intenté dividirlo en 2 consultas.

Básicamente, tengo 2 IQueryables de tipo T y T1. Quiero tomar todas las T en las que T.ID no existe en T1.ParentId.

+1

¿Sabía que puede aplicar el "!" operador a .Contains()? –

Respuesta

15
T.Where(x => ! T1.Select(y => y.ParentID).Contains(x.ID)) 

en LINQ que suelen trabajar de abajo hacia arriba. Aquí primero obtenemos una colección de todos los parentID en T1 - la parte T1.Select (...). Luego creamos una cláusula where que selecciona todos los Ts cuyos ID no están contenidos en ese conjunto.

Tenga en cuenta que el resultado es una consulta. Para materializarlo, use ToList() o similar en la declaración anterior.

+0

¡Muchas gracias! Esto funciona. –

Cuestiones relacionadas