我有以下代码:
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();
当我运行第二个语句时,我收到错误:
Unable to create a constant value of type 'CR.Data.JobPortalInfo'.
Only primitive types or enumeration types are supported in this context.
JobPortalInfo有一个1- [0或1],客户和客户有一个1- *的电子邮件。
我在这里做错了什么想法?
答案 0 :(得分:1)
我明白了。
jobPortalInfos是Linq to Objects,但EmailRepository仍然是IQueryable / Linq To Entites。它不知道如何将LinqToObject jobPortalInfos转换为Sql Server对象。
我最终这样做了:
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();
不确定是否有更简洁的方法来做到这一点,但似乎有效。