您好,我有以下 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”实体不包含名称为“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
子句有问题。谁能帮我解决这个问题。
提前致谢
最佳答案
每个实体都需要不同的位置。
(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's,它会更新第二个链接实体的过滤器,而不是盲目地将它添加到第一个。
关于c# - Linq where子句查找错误实体的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850280/