Here it is...
public DataTable GetChaletStats(int eventId, PaymentMethodEnum[] selectedPaymentMethods,
TransactionStatusEnum[] selectedStatus)
{
var adapter = new DataAccessAdapter();
DerivedTableDefinition initalSumsTable = GetInitalTotalsDynamicRelation(eventId, selectedPaymentMethods,
selectedStatus);
var bucket = new RelationPredicateBucket();
const string aliasRightOperand = "ta";
var joinExpression = new PredicateExpression(VwStatsWeekenderChaletsTotalAvailableFields.Berth.SetObjectAlias(aliasRightOperand) == new EntityField2("Berth", initalSumsTable.Alias, typeof(int)));
var dynamicRelation = new DynamicRelation(initalSumsTable, JoinHint.Right, EntityType.VwStatsWeekenderChaletsTotalAvailableEntity, aliasRightOperand, joinExpression);
bucket.Relations.Add(dynamicRelation);
var dataTable = new DataTable();
var fields = new ResultsetFields(8);
fields.DefineField(new EntityField2("Berth", initalSumsTable.Alias, typeof(int)), 0);
fields.DefineField(new EntityField2("Takings", initalSumsTable.Alias, typeof(int)), 1);
fields.DefineField(new EntityField2("RequiredBalanceTakings", initalSumsTable.Alias, typeof(int)), 2);
fields.DefineField(new EntityField2("BalanceTakings", initalSumsTable.Alias, typeof(int)), 3);
fields.DefineField(new EntityField2("FullPaymentsQuantity", initalSumsTable.Alias, typeof(int)), 4);
fields.DefineField(new EntityField2("DepositPaymentsQuantity", initalSumsTable.Alias, typeof(int)), 5);
fields.DefineField(new EntityField2("BalancePaymentsQuantity", initalSumsTable.Alias, typeof(int)), 6);
fields.DefineField(new EntityField2("TotalAvailableChalets", dynamicRelation.AliasRightOperand, typeof(int)), 7);
adapter.FetchTypedList(fields, dataTable, bucket, 0, null, true, null);
return dataTable;
}
private DerivedTableDefinition GetInitalTotalsDynamicRelation(int eventId, PaymentMethodEnum[] selectedPaymentMethods,
TransactionStatusEnum[] selectedStatus)
{
var fields = new ResultsetFields(7);
fields.DefineField(VwChaletOrderDetail2Fields.Berth, 0, "Berth");
fields.DefineField(VwChaletOrderDetail2Fields.Takings, 1, "Takings", AggregateFunction.Sum);
fields.DefineField(VwChaletOrderDetail2Fields.RequiredBalanceTakings, 2, "RequiredBalanceTakings", AggregateFunction.Sum);
fields.DefineField(VwChaletOrderDetail2Fields.BalanceTakings, 3, "BalanceTakings", AggregateFunction.Sum);
fields.DefineField(VwChaletOrderDetail2Fields.FullPaymentsQuantity, 4, "FullPaymentsQuantity", AggregateFunction.Sum);
fields.DefineField(VwChaletOrderDetail2Fields.DepositPaymentsQuantity, 5, "DepositPaymentsQuantity", AggregateFunction.Sum);
fields.DefineField(VwChaletOrderDetail2Fields.BalancePaymentsQuantity, 6, "BalancePaymentsQuantity", AggregateFunction.Sum);
IPredicateExpression predicateExpression = new PredicateExpression
{
VwChaletOrderDetail2Fields.EventId == eventId,
VwChaletOrderDetail2Fields.PaymentMethodId ==
selectedPaymentMethods,
VwChaletOrderDetail2Fields.Status ==
selectedStatus
};
IGroupByCollection groupByClause = new GroupByCollection { VwChaletOrderDetail2Fields.Berth };
var dtDefinition = new DerivedTableDefinition(fields, "t0", predicateExpression, groupByClause);
return dtDefinition;
}
exec sp_executesql N'SELECT [LPA_t1].[Berth], [LPA_t1].[Takings], [LPA_t1].[RequiredBalanceTakings], [LPA_t1].[BalanceTakings], [LPA_t1].[FullPaymentsQuantity], [LPA_t1].[DepositPaymentsQuantity], [LPA_t1].[BalancePaymentsQuantity], [ta].[TotalAvailableChalets] FROM ( (SELECT [bangfaceweekender].[dbo].[vw_chalet_order_detail2].[Berth], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[Takings]) AS [Takings], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[RequiredBalanceTakings]) AS [RequiredBalanceTakings], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[BalanceTakings]) AS [BalanceTakings], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[FullPaymentsQuantity]) AS [FullPaymentsQuantity], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[DepositPaymentsQuantity]) AS [DepositPaymentsQuantity], SUM([bangfaceweekender].[dbo].[vw_chalet_order_detail2].[BalancePaymentsQuantity]) AS [BalancePaymentsQuantity] FROM [bangfaceweekender].[dbo].[vw_chalet_order_detail2] WHERE ( [bangfaceweekender].[dbo].[vw_chalet_order_detail2].[EventId] = @EventId1 AND [bangfaceweekender].[dbo].[vw_chalet_order_detail2].[PaymentMethodId] IN (@PaymentMethodId2, @PaymentMethodId3, @PaymentMethodId4) AND [bangfaceweekender].[dbo].[vw_chalet_order_detail2].[Status] IN (@Status5)) GROUP BY [bangfaceweekender].[dbo].[vw_chalet_order_detail2].[Berth]) [LPA_t1] RIGHT JOIN [bangfaceweekender].[dbo].[vw_stats_weekender_chalets_total_available] [LPA_t2] ON ( [LPA_t2].[Berth] = [LPA_t1].[Berth]))',N'@EventId1 int,@PaymentMethodId2 int,@PaymentMethodId3 int,@PaymentMethodId4 int,@Status5 int',@EventId1=9,@PaymentMethodId2=1,@PaymentMethodId3=2,@PaymentMethodId4=3,@Status5=1
The multi-part identifier "ta.TotalAvailableChalets" could not be bound.
And this is with V2.6 October 9th 2009 and 2.6.10.0421.