Add ability to expand many subcollections with WCF Data Services

Description

Okay. I haven't the faintest idea where this issue is. So I'm just going to report what I have. I have the following expression tree. It is generating the follow SQL. The SQL has a stray '.' floating in the middle of it.

.Call System.Linq.Queryable.Select(
.Call System.Linq.Queryable.Where(
.Constant<NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.CampaignJob]>(NHibernate.Linq.NhQueryable`1[ISIS.Data.Core.CampaignJob]),
'(.Lambda #Lambda1<System.Func`2[ISIS.Data.Core.CampaignJob,System.Boolean]>)),
'(.Lambda #Lambda2<System.Func`2[ISIS.Data.Core.CampaignJob,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.CampaignJob,System.Collections.Generic.IEnumerable`1[System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]]]]>))

.Lambda #Lambda1<System.Func`2[ISIS.Data.Core.CampaignJob,System.Boolean]>(ISIS.Data.Core.CampaignJob $element) {
$element.Id == .Constant<System.Guid>(6c4e37fd-e357-42b1-8564-a09900e2e52e)
}

.Lambda #Lambda2<System.Func`2[ISIS.Data.Core.CampaignJob,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.CampaignJob,System.Collections.Generic.IEnumerable`1[System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]]]]>(ISIS.Data.Core.CampaignJob $p)
{
.New System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.CampaignJob,System.Collections.Generic.IEnumerable`1[System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]]]()
{
ExpandedElement = $p,
Description = "Campaigns",
ReferenceDescription = "",
ProjectedProperty0 = .Call System.Linq.Enumerable.Select(
$p.Campaigns,
.Lambda #Lambda3<System.Func`2[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]]>)
}
}

.Lambda #Lambda3<System.Func`2[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]]>(ISIS.Data.Core.Campaign $p)
{
.New System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.Campaign,System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]],System.Collections.Generic.IEnumerable`1[ISIS.Data.Core.CampaignSegment]]()
{
ExpandedElement = $p,
Description = "ClientProduct,Segments",
ReferenceDescription = "ClientProduct",
ProjectedProperty0 = .New System.Data.Services.Internal.ExpandedWrapper`3[ISIS.Data.Core.ClientProduct,ISIS.Data.Core.Product,System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business]]()
{
ExpandedElement = $p.ClientProduct,
Description = "Product,Client",
ReferenceDescription = "Product,Client",
ProjectedProperty0 = .If ($p.ClientProduct == null) {
null
} .Else {
($p.ClientProduct).Product
},
ProjectedProperty1 = .If ($p.ClientProduct == null) {
null
} .Else {
.New System.Data.Services.Internal.ExpandedWrapper`2[ISIS.Data.Core.Client,ISIS.Data.Core.Business](){
ExpandedElement = ($p.ClientProduct).Client,
Description = "Business",
ReferenceDescription = "Business",
ProjectedProperty0 = .If (($p.ClientProduct).Client == null) {
null
} .Else {
(($p.ClientProduct).Client).Business
}
}
}
},
ProjectedProperty1 = $p.CampaignSegments
}
}

select campaignjo0_.Id as col_0_0_,
(select campaigns1_.IntId, clientprod2_.IntId, clientprod2_.IntId, product3_.ProductId, clientprod2_.IntId, client4_.Id, client4_.Id, business5_.UniqueId, .
from Campaign campaigns1_ left outer join ClientProduct clientprod2_
on campaigns1_.ClientProductId=clientprod2_.Id
left outer join Product product3_
/* whole bunch of joins */
where campaignjo0_.Id=campaigns1_.CampaignJobId and campaigns1_.Id=campaignse6_.CampaignId) as col_1_0_,
/* lots of columns */
from CampaignJob campaignjo0_
where campaignjo0_.Id=@p0

Environment

None

Activity

Show:

Alex Zaytsev September 8, 2014 at 11:32 AM

Close issues resolved in 3.3.3

Alex Zaytsev January 26, 2013 at 1:08 PM

Ported-back to 3.3.x fd0842119f9ec8af0c4b648506dd5586386657b0

Alex Zaytsev January 26, 2013 at 1:07 PM

Fixed in master f0c95ac2ba75bc2607eee29e20e18c48e5b3c85c

Alex Zaytsev January 26, 2013 at 12:28 AM

See

Jerome Haltom January 26, 2013 at 12:27 AM

In fact, this whole select statement is screwed up. A sub-select cannot contain multiple columns.

Fixed

Details

Assignee

Reporter

Labels

Components

Fix versions

Affects versions

Priority

Who's Looking?

Open Who's Looking?
Created January 26, 2013 at 12:24 AM
Updated September 8, 2014 at 11:32 AM
Resolved January 26, 2013 at 1:08 PM
Who's Looking?