You don't need to use that. What you should use is DynamicRelation, but you used the wrong overload. See the code snippet below:
Dim filter = UserFields.UserName.Equal("kites")
Dim relations = new RelationCollection()
relations.Add(new DynamicRelation(CampaignsLeadFields.Id, JoinHint.Inner, IRIS.EntityType.UserEntity, string.Empty, string.Empty, CampaignsLeadFields.Id.Equal(UserFields.Id)))
e.ContainedCollection.GetMulti(filter, me.txtMax.value, nothing, relations)
Add to the top of the code file:
Imports SD.LLBLGen.Pro.QuerySpec
This will give you access to the extension method '.Equal()'. Makes writing predicates easier
I first create the filter for the User.UserName, store it in filter.
I then create the relation. Relations passed to GetMulti are used to join additional elements to the one fetched by the collection. e.ContainedCollection is a collection of CampaignLeadEntity instances, so we have to join UserEntity to it. I use the CampaignsLeadFields.Id field constructor to create a field object representing that field.
I then pass it to the GetMulti call to fetch the rows.
I didn't know what 'envelopFilter' was, so I didn't use it. If it's an additional filter you want to use, you have to add 'filter' to that predicate expression and then pass envelopFilter to GetMulti() instead.