4

嗨,我有以下 Linq 查询:

(from c in new_contactsubscriptionSet
join p in new_PaymentStatusSet 
    on c.new_PaymentStatusId.Id equals p.new_PaymentStatusId
    where (c.new_EndDate > DateTime.Now && 
           c.new_EndDate <= DateTime.Now.AddDays(14)) && 
    p.new_IsPaidStatus == false
select c)

它抛出以下内容FaultException,这意味着它对new_ispaidstatus错误实体的检查属性。它应该检查new_PaymentStatus而不是new_contactsubscription

故障异常

'new_contactsubscription' entity doesn't contain attribute with Name = 'new_ispaidstatus'.

如果我使用以下查询,它的工作正常:

(from c in new_contactsubscriptionSet
join p in new_PaymentStatusSet 
    on c.new_PaymentStatusId.Id equals p.new_PaymentStatusId
    where p.new_IsPaidStatus == false
select c)

或者

(from c in new_contactsubscriptionSet
join p in new_PaymentStatusSet 
    on c.new_PaymentStatusId.Id equals p.new_PaymentStatusId
    where (c.new_EndDate > DateTime.Now && 
           c.new_EndDate <= DateTime.Now.AddDays(14))
select c)

看起来该Where子句有问题。谁能帮我解决这个查询。

提前致谢

4

1 回答 1

7

每个实体都需要不同的位置。

(from c in new_contactsubscriptionSet
 join p in new_PaymentStatusSet 
    on c.new_PaymentStatusId.Id equals p.new_PaymentStatusId
 where (c.new_EndDate > DateTime.Now && c.new_EndDate <= DateTime.Now.AddDays(14))
 where p.new_IsPaidStatus == false
 select c)

这是由于 Microsoft 将 Linq 查询映射到查询表达式的方式。它尝试将 where 映射到它的唯一过滤条件中,但这些条件是在实体到实体的基础上应用的。因此,它正在确定所有使用的属性的名称,并针对它评估实体的第一个表达式为它创建一个过滤器。

使用多个 where's,它将更新第二个链接实体的过滤器,而不是盲目地将其添加到第一个。

于 2013-09-17T13:13:37.127 回答