La consulta Linq de SubSonic3 genera & # 8220; NO ES NULO & # 8221; en lugar de & # 8220; IS NULL & # 8221;

StackOverflow https://stackoverflow.com/questions/1440263

Pregunta

aquí está mi consulta de linq:

 var test = from m in db.Members where m.UserId == null select m.Id;
        test.ToList();

UserId es un campo Guid anulable en la tabla de miembros que corresponde a la tabla de miembros ASP.NET aspnet_member. No puedo generar una consulta a través de subsónica que seleccione dónde el ID de usuario ES nulo, solo donde NO ES nulo.

aquí está mi salida esperada:

 SELECT Id FROM Member WHERE UserId IS NULL

aquí está mi salida real:

 SELECT Id FROM Member WHERE UserId IS **NOT** NULL

¿Alguna idea? Estoy en los procesos de depuración, pero tal vez alguien más se ha encontrado con esto.

¿Fue útil?

Solución

Resulta que no hubo implementación para ExpressionType.Equals en el método VisitBinary. Recientemente hubo un parche que se puede encontrar aquí:

[ http://github.com/subsonic/SubSonic-3.0/blob/master/SubSonic.Core/Linq/Structure/TSqlFormatter.csfont>[1]

El código anterior era:

case ExpressionType.Equal:
case ExpressionType.NotEqual:
    if (right.NodeType == ExpressionType.Constant)
                {
                    ConstantExpression ce = (ConstantExpression)right;
                    if (ce.Value == null)
                    {
                        this.Visit(left);
                        sb.Append(" IS NOT NULL");
                        break;
                    }
                }
                else if (left.NodeType == ExpressionType.Constant)
                {
                    ConstantExpression ce = (ConstantExpression)left;
                    if (ce.Value == null)
                    {
                        this.Visit(right);
                        sb.Append(" IS NOT NULL");
                        break;
                    }
                }
                goto case ExpressionType.LessThan;

La implementación se ha agregado para Equal. Is es prácticamente idéntico a NotEqual, excepto que emite IS NULL en lugar de IS NOT NULL.

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