Tengo una colección de Elementos que cada uno tiene una colección de Relaciones. Tengo una lista de Grupos que los Elementos pueden tener Relaciones con el.

Puedo encontrar todos los Artículos que tienen una particular relación, pero ahora quiero encontrar todos los Artículos que no tienen una Relación con alguno de mis Grupos.

Puedo encontrar los Elementos que tienen una relación con alguno de los Grupos que haciendo esto:

Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
Dim haveGroup = (From item In items _
                 Where item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
                 Select item).ToList

¿Cómo puedo encontrar todos los artículos que no tienen una relación con alguno de los grupos?

Simplemente no se quiere negar la cláusula where?
Sí, lo hace.

OriginalEl autor Nick | 2009-06-11

5 Comentarios

  1. 6

    No recuerdo VB todo bien, pero un simple «No» debe trabajar.

    Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
    Dim haveGroup = (From item In items _
                 Where Not item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
                 Select item).ToList
    Gracias, eso es irregular. 🙂

    OriginalEl autor StriplingWarrior

  2. 6

    Han tratado de negar los resultados de la Contains método?

    Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
    Dim haveGroup = (From item In items _
                     Where item.Relationships.Any(Function(r) Not groupIds.Contains(r.TargetID)) _
                     Select item).ToList
    Esta respuesta es incorrecta. Esto coincide con todos los elementos que tienen una o más Relaciones de las que no coinciden, en oposición a todos los elementos que no coincidan con las Relaciones.
    Esto fue lo que originalmente había intentado, pero como Thorarin señala correctamente, devuelve todos los elementos en el grupo original, en lugar de excluir a aquellos con ningún tipo de partidos.

    OriginalEl autor Andrew Hare

  3. 2

    Si estás generando el haveGroup colección de todos modos, a continuación, sólo podría hacer algo como esto:

    Dim groupIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
    
    Dim haveGroup = (From item In items _
        Where item.Relationships.Any(Function(r) groupIds.Contains(r.TargetID)) _
        Select item).ToList
    
    Dim haveNotGroup = items.Except(haveGroup).ToList

    OriginalEl autor LukeH

  4. 0
    Dim listIds as List(of Integer) = (From g In cmdbGroups Select g.ID).ToList
    Dim haveGroup = (From item In items _
        Where Not listIds.Contains(item.ID) 
        Select item.ID).ToList
    Por favor, puedes agregar un explenation a su respuesta?

    OriginalEl autor Rei Salazar

Dejar respuesta

Please enter your comment!
Please enter your name here