protected bool HandleAddressOrIdEquals(Expression left, Expression right) { string itemName = null; PropertyHint propertyHint = GetPropertyHint(left); if (propertyHint == null || !(propertyHint.MappingType == PropertyMappingType.Address || propertyHint.MappingType == PropertyMappingType.Id)) { return(false); } if (left is SelectVariableNameExpression) { itemName = (left as SelectVariableNameExpression).Name; } else if (left is MemberExpression) { var m = left as MemberExpression; if (m.Expression is QuerySourceReferenceExpression) { itemName = (m.Expression as QuerySourceReferenceExpression).ReferencedQuerySource.ItemName; } else { var visitResult = VisitMemberExpression(m); if (visitResult is SelectVariableNameExpression) { itemName = (visitResult as SelectVariableNameExpression).Name; } } } if (itemName == null) { return(false); } var constantExpression = right as ConstantExpression; if (constantExpression == null) { return(false); } string address = null; if (propertyHint.MappingType == PropertyMappingType.Id) { address = MakeResourceAddress(GetPropertyInfo(left), constantExpression.Value.ToString()); } else if (propertyHint.MappingType == PropertyMappingType.Address) { address = constantExpression.Value.ToString(); } if (address != null) { if (QueryBuilder.SelectVariables.Contains(itemName)) { QueryBuilder.AddFilterExpression(String.Format("(?{0}=<{1}>)", itemName, address)); } else { QueryBuilder.ConvertVariableToConstantUri(itemName, address); } return(true); } return(false); }