Entity Framework - Condition on one to many join (Lambda)
- by nirpi
Hi,
I have 2 entities: Customer & Account, where a customer can have multiple accounts.
On the account, I have a "PlatformTypeId" field, which I need to condition on (multiple values), among other criterions.
I'm using Lambda expressions, to build the query. Here's a snippet:
var customerQuery = (from c in context.CustomerSet.Include("Accounts")
select c);
if (criterions.UserTypes != null && criterions.UserTypes.Count() > 0)
{
List<short> searchCriterionsUserTypes = criterions.UserTypes.Select(i => (short)i).ToList();
customerQuery = customerQuery.Where(CommonDataObjects.LinqTools.BuildContainsExpression<Customer, short>(c => c.UserTypeId, searchCriterionsUserTypes));
}
// Other criterions, including the problematic platforms condition (below)
var customers = customerQuery.ToList();
I can't figure out how to build the accounts' platforms condition:
if (criterions.Platforms != null && criterions.Platforms.Count() > 0)
{
List<short> searchCriterionsPlatforms = criterions.Platforms.Select(i => (short)i).ToList();
customerQuery = customerQuery.Where(c => c.Accounts.Where(LinqTools.BuildContainsExpression<Account, short>(a => a.PlatformTypeId, searchCriterionsPlatforms)));
}
(The BuildContainsExpression is a method we use to build the expression for the multi-select)
I'm getting a compilation error:
The type arguments for method 'System.Linq.Enumerable.Where(System.Collections.Generic.IEnumerable, System.Func)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Any idea how to fix this?
Thanks,
Nir.