Linq对象给出了奇怪的错误

时间:2014-05-05 20:52:12

标签: runtime-error linq-to-objects

我有以下代码:

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- *的电子邮件。

我在这里做错了什么想法?

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();        

不确定是否有更简洁的方法来做到这一点,但似乎有效。