views:

21

answers:

1

Hi,

I'm trying to get the following LINQ query to work against the database (3.5 SP1):

            var labelIds = new List<int> { 1, 2 };
            var customersAggregatedTransactionsByType =
                 (from transactions in context.TransactionSet
                  from customers in context.CustomerSet.Where(LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds))
                  from accounts in context.AccountSet
                  where customers == accounts.Customer
                     && accounts.Id == transactions.Account.Id
                     && transactions.DateTime >= fromDate && transactions.DateTime < toDate
                  group transactions.Amount
                  by new
                  {
                      UserAccountId = transactions.Account.Id,
                      TransactionTypeId = transactions.TransactionTypeId,
                      BaseAssetId = accounts.BaseAssetId
                  } into customerTransactions
                  select customerTransactions).ToList();

Once I add the "Where(LinqTools.BuildContainsExpression(u => u.LabelId, labelIds))" I get the following exception:

System.InvalidOperationException: Internal .NET Framework Data Provider error 1025.

If I remove the "Where(LinqTools.BuildContainsExpression(u => u.LabelId, labelIds))" all's good.

Any help will be appreciated.

Thanks,Nir.

A: 

Try:

        var labelIds = new List<int> { 1, 2 };
        var exp = LinqTools.BuildContainsExpression<Billing.Customer, int>(u => u.LabelId, labelIds);
        var customersAggregatedTransactionsByType =
             (from transactions in context.TransactionSet
              from customers in context.CustomerSet.Where(exp)
              from accounts in context.AccountSet
              where customers == accounts.Customer
                 && accounts.Id == transactions.Account.Id
                 && transactions.DateTime >= fromDate && transactions.DateTime < toDate
              group transactions.Amount
              by new
              {
                  UserAccountId = transactions.Account.Id,
                  TransactionTypeId = transactions.TransactionTypeId,
                  BaseAssetId = accounts.BaseAssetId
              } into customerTransactions
              select customerTransactions).ToList();

You want the result in the query, not the call to LinqTools.BuildContainsExpression itself.

Craig Stuntz
That does it! Thanks a lot!
nirpi