none
Left join (sin incluir registros comunes) RRS feed

  • Pregunta

  • Buenas.

    Tengo la siguiente consulta SQL:

    SELECT
    	C.*, UC.CompanyId
    FROM [common].[Company] C
    LEFT OUTER JOIN [security].[UserCompany] UC ON C.CompanyId = UC.CompanyId
    WHERE
    	UC.CompanyId IS NULL;

    Esto me devuelve los registros únicamente del lado izquierdo. Quiero hacer lo mismo pero utilizando Linq y mi intento ha sido el siguiente:

    var q = from c in companies
    	join uc in userCompanies on c.CompanyId equals uc.CompanyId into uc2
    	from uc in uc2.DefaultIfEmpty()
    	where
    		uc.CompanyId == null
    	select
    		c;

    Pero me tira warning en la clásula where:

    Advertencia CS0472 El resultado de la expresión siempre es 'false' porque un valor del tipo 'int' nunca es igual a 'NULL' de tipo 'int?'

    No puedo cambiar el tipo de la entidad de dominio ¿qué alternativa tengo?

    Saludos.

    lunes, 12 de octubre de 2020 3:09

Respuestas

  • hola

     Es que tienes que usar

    var q = from c in companies
    	join uc in userCompanies on c.CompanyId equals uc.CompanyId into ucGroup
    	from subuc in ucGroup.DefaultIfEmpty()
    	where subuc == null
    	select c;

    comparas la entidad complete no la propiedad

    Perform left outer joins

    No asignes el DefaulIfNull() al mismo nombre uc que ya usaste en el join

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 13 de octubre de 2020 14:10

Todas las respuestas

  • Hola eduar2083,

    Lo que te hace falta es utilizar un if que verifique en cada caso si al intentar hacer la operación, se va a dar el caso que provoca el error (él mismo error te lo dice, int nunca puede ser igual a nulo. int? es la versión que acepta valores NULL, que puede ser igual a nulo). Podría ser algo así:

    if(arrTopics.Count() != 0)lugar.

    Espero que te sea de ayuda. Por favor no olvides marcar una respuesta si resolviste tu consulta (debajo de cada post hay una opción que dice “Marcar como Respuesta”). Quedo pendiente de cualquier actualización. Gracias por levantar tu consulta en los foros de msdn.

     

    Saludos cordiales

    Gabriel Castro

     ____________________________ 

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    lunes, 12 de octubre de 2020 20:58
  • hola

     Es que tienes que usar

    var q = from c in companies
    	join uc in userCompanies on c.CompanyId equals uc.CompanyId into ucGroup
    	from subuc in ucGroup.DefaultIfEmpty()
    	where subuc == null
    	select c;

    comparas la entidad complete no la propiedad

    Perform left outer joins

    No asignes el DefaulIfNull() al mismo nombre uc que ya usaste en el join

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    martes, 13 de octubre de 2020 14:10