SELECT tbl1.ID, tbl1.Value, tbl2.ID, tbl2.Value
FROM Object tbl1, Object tbl2
where lower(tbl1.Value) = lower(tbl2.Value)
and tbl1.ID <> tbl2.ID
and tbl1.ID = 399;
Please try the following code (un-tested):
DataAccessAdapter adapter = new DataAccessAdapter();
IRelationPredicateBucket bucket = new RelationPredicateBucket();
ResultsetFields fields = new ResultsetFields(4);
fields.DefineField(ObjectFields.Id, 0, "Id1", "tbl1");
fields.DefineField(ObjectFields.Value, 1, "Value1", "tbl1");
fields.DefineField(ObjectFields.Id, 2, "Id2", "tbl2");
fields.DefineField(ObjectFields.Value, 3, "Value2", "tbl2");
EntityField2 field1 = new EntityField2();
field1 = ObjectFields.Value;
field1.ObjectAlias = "tbl1";
field1.ExpressionToApply = new DbFunctionCall( "LOWER", new object[] { field1 } );
EntityField2 field2 = new EntityField2();
field2 = ObjectFields.Value;
field2.ObjectAlias = "tbl2"
field2.ExpressionToApply = new DbFunctionCall( "LOWER", new object[] { field2 } );
bucket.Relations.Add(New EntityRelation(field1, field2, RelationType.ManyToMany), JoinHint.Inner);
bucket.PredicateExpression.Add(fields[1] != fields[3]);
bucket.PredicateExpression.Add(fields[1] == 399);