For one thing it does not join on the table for which I create relation on the fly (left join on UserQuery and HiddenUserSharedQuery.
Here is code:
Dim toReturn As New DataTable
Dim adapter As New DataAccessAdapter
Dim fields As New ResultsetFields(5)
fields.DefineField(SharedUserQueryFieldIndex.QueryId, 0, "QueryId", "SharedQuery")
fields.DefineField(QueryFieldIndex.DateCreated, 1, "DateCreated", "Query")
fields.DefineField(QueryFieldIndex.LastRunDate, 2, "LastRunDate", "Query")
fields.DefineField(UserQueryFieldIndex.Name, 3, "Name", "UserQuery")
fields.DefineField(UserQueryFieldIndex.Description, 4, "Description", "UserQuery")
Dim bucket As New RelationPredicateBucket
'join to Query
bucket.Relations.Add(SharedUserQueryEntity.Relations.QueryEntityUsingQueryId, "", "", JoinHint.Inner)
'join to UserQuery
bucket.Relations.Add(UserQueryEntity.Relations.SharedUserQueryEntityUsingFromUserIdQueryId, "", "", JoinHint.Inner)
'create relationon on the fly to UserQuery for ToUserId
Dim relation As IEntityRelation = New EntityRelation(RelationType.OneToMany)
relation.StartEntityIsPkSide = True
relation.AddEntityFieldPair(EntityFieldFactory.Create(UserQueryFieldIndex.UserId), EntityFieldFactory.Create(SharedUserQueryFieldIndex.ToUserId))
relation.AddEntityFieldPair(EntityFieldFactory.Create(UserQueryFieldIndex.QueryId), EntityFieldFactory.Create(SharedUserQueryFieldIndex.QueryId))
relation.InheritanceInfoPkSideEntity = InheritanceInfoProviderSingleton.GetInstance().GetInheritanceInfo("UserQueryEntity", True)
relation.InheritanceInfoFkSideEntity = InheritanceInfoProviderSingleton.GetInstance().GetInheritanceInfo("SharedUserQueryEntity", False)
'create relation on the fly to HiddenUserSharedQuery
bucket.Relations.Add(relation, JoinHint.Left)
Dim relation2 As IEntityRelation = New EntityRelation(RelationType.OneToOne)
relation.StartEntityIsPkSide = True
relation.AddEntityFieldPair(SharedUserQueryFields.ToUserId, HelperClasses.HiddenUserSharedQueryFields.HiddentFromUserId)
relation.AddEntityFieldPair(SharedUserQueryFields.QueryId, HiddenUserSharedQueryFields.QueryId)
relation.InheritanceInfoPkSideEntity = InheritanceInfoProviderSingleton.GetInstance().GetInheritanceInfo("SharedUserQueryEntity", True)
relation.InheritanceInfoFkSideEntity = InheritanceInfoProviderSingleton.GetInstance().GetInheritanceInfo("HiddenUserSharedQueryEntity", True)
bucket.Relations.Add(relation, JoinHint.Left)
Dim filter As New PredicateExpression
filter.Add(PredicateFactory.CompareValue(UserQueryFieldIndex.UserId, ComparisonOperator.Equal, sharedToUserId))
filter.AddWithAnd(PredicateFactory.CompareNull(HiddenUserSharedQueryFieldIndex.HiddentFromUserId))
bucket.PredicateExpression.Add(filter)
adapter.FetchTypedList(fields, toReturn, bucket, False)
Here is query ouput
Generated Sql query:
Query: SELECT DISTINCT [SharedQuery].[QueryId], [Query].[DateCreated], [Query].[LastRunDate], [UserQuery].[Name], [UserQuery].[Description] FROM (( [db_MindSphere_PCA_InfoCenter].[dbo].[Query] INNER JOIN [db_MindSphere_PCA_InfoCenter].[dbo].[SharedUserQuery] ON [db_MindSphere_PCA_InfoCenter].[dbo].[Query].[QueryId]=[db_MindSphere_PCA_InfoCenter].[dbo].[SharedUserQuery].[QueryId]) INNER JOIN [db_MindSphere_PCA_InfoCenter].[dbo].[UserQuery] ON [db_MindSphere_PCA_InfoCenter].[dbo].[UserQuery].[UserId]=[db_MindSphere_PCA_InfoCenter].[dbo].[SharedUserQuery].[FromUserId] AND [db_MindSphere_PCA_InfoCenter].[dbo].[UserQuery].[QueryId]=[db_MindSphere_PCA_InfoCenter].[dbo].[SharedUserQuery].[QueryId]) WHERE ( ( ( [db_MindSphere_PCA_InfoCenter].[dbo].[UserQuery].[UserId] = @UserId1 AND [db_MindSphere_PCA_InfoCenter].[dbo].[HiddenUserSharedQuery].[HiddentFromUserId] IS NULL)))
Parameter: @UserId1 : Int32. Length: 0. Precision: 10. Scale: 0. Direction: Input. Value: 4.
Method Exit: CreateSelectDQ