Question

I have the following code:

List<JobPortalInfo> jobPortalInfos = uow.JobPortalInfoRepository.GetQuery()                         
    .Where(x => x.Job.Id == emailHash.JobId)
    .ToList();

var temp = uow.EmailRepository.GetQuery()
    .Where(x => jobPortalInfos.Any(y => (y.Contact != null && y.Contact.Id == x.ContactId)))
    .ToList();

When I run the 2nd statement, I'm getting the error:

Unable to create a constant value of type 'CR.Data.JobPortalInfo'. 
Only primitive types or enumeration types are supported in this context.

JobPortalInfo has a 1-[0 or 1] with Customer and Customer has a 1-* with Email.

Any ideas what I'm doing wrong here?

Was it helpful?

Solution

I figured it out.

jobPortalInfos is Linq to Objects, but EmailRepository is still an IQueryable/Linq To Entites. It doesn't know how to convert the LinqToObject jobPortalInfos to a Sql Server object.

I ended up doing this:

List<JobPortalInfo> jobPortalInfos = uow.JobPortalInfoRepository.GetQuery()                         
    .Where(x => x.Job.Id == emailHash.JobId)
    .ToList();

List<long> contactIds = jobPortalInfos
    .Where(x => x.Contact != null)
    .Select(y => y.Contact.Id)
    .ToList();

var temp = uow.EmailRepository.GetQuery()
    .Where(x => contactIds.Contains(x.ContactId))
    .ToList();        

Not sure if there is a more concise way to do this or not, but it seems to work.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top