private bool HandleEqualsNotEquals(BinaryExpression equalityExpression) { ConstantExpression constantExpression = ExtractConstantExpression(equalityExpression); if (constantExpression == null) { return(false); } Expression variableExpression = equalityExpression.Left.Equals(constantExpression) ? equalityExpression.Right : equalityExpression.Left; var variablePropertyHint = GetPropertyHint(variableExpression); var variableIsAddress = variablePropertyHint != null && (variablePropertyHint.MappingType == PropertyMappingType.Address || variablePropertyHint.MappingType == PropertyMappingType.Id); var value = constantExpression.Value; var defValue = variableExpression.Type.GetDefaultValue(); if ((value == null && defValue == null) || (value != null && value.Equals(defValue))) { if (variableIsAddress) { var querySourceReferenceExpression = ((MemberExpression)variableExpression).Expression as QuerySourceReferenceExpression; var varname = querySourceReferenceExpression.ReferencedQuerySource.ItemName; var filter = equalityExpression.NodeType == ExpressionType.NotEqual ? "( bound(?{0}))" : "(!bound(?{0}))"; _filterWriter.AppendFormat(filter, varname); return(true); } else { string varname = null; QueryBuilder.StartOptional(); var convertedExpression = VisitExpression(variableExpression); QueryBuilder.EndOptional(); if (convertedExpression is SelectVariableNameExpression) { varname = (convertedExpression as SelectVariableNameExpression).Name; } if (varname != null) { string filter; if (variableExpression.Type.IsValueType && defValue != null) { filter = equalityExpression.NodeType == ExpressionType.NotEqual ? "(bound(?{0}) && (?{0} != {1}))" : "(!bound(?{0}) || (?{0} = {1}))"; } else { filter = equalityExpression.NodeType == ExpressionType.NotEqual ? "( bound(?{0}))" : "(!bound(?{0}))"; } if (defValue != null) { _filterWriter.AppendFormat(filter, varname, _filterWriter.MakeSparqlConstant(defValue)); } else { _filterWriter.AppendFormat(filter, varname); } return(true); } } } if (variableIsAddress && value != null) { var querySourceReferenceExpression = ((MemberExpression)variableExpression).Expression as QuerySourceReferenceExpression; var varname = querySourceReferenceExpression.ReferencedQuerySource.ItemName; var filter = equalityExpression.NodeType == ExpressionType.Equal ? "( sameTerm(?{0}, <{1}>))" : "(!sameTerm(?{0}, <{1}>))"; _filterWriter.AppendFormat(filter, varname, MakeResourceAddress(GetPropertyInfo(constantExpression), value.ToString())); return(true); } return(false); }