2013-03-21 30 views
1

我有一个实体框架语句,用于检查用户是否已经在队列中。看似简单,但由于某种原因,我得到一个异常:“铸塑价值型‘布尔’失败,因为物化值为null无论是结果型的泛型参数或查询必须使用可空类型”为什么会linq .Any()抛出“铸造值类型'布尔'失败,因为物化”?

任何人都知道为什么?

var campaignIds = campaigns.Select(c => c.Id); 
return _queuedRecipientRepository.GetTable().Any(q => campaignIds.Contains(q.CampaignId) && q.Recipient.Id == recipient.Id); 
+2

请发送已发送到服务器(SQL事件探查器)的SQL。由于某种原因,服务器发送NULL。 – usr 2013-03-21 17:43:03

+0

放置断点并检查campaignIds是否为空(列表中的项目或变量本身) – AaronLS 2013-03-21 17:46:16

+0

尝试在Select的末尾添加ToList()。 – 2013-03-21 17:54:56

回答

1

我想你应该包括收件人作为数据库结果的一部分。 在使用中添加System.Data.Entity

var campaigns = from q in context.Campaigns.Include(x => x.Recipient) 
       where campaignIds.Contains(q.CampaignId) && q.Recipient.Id == recipient.Id 
       select q.Id 
相关问题