c# - Linq where子句查找错误实体的属性

标签 c# linq entity-framework dynamics-crm-2011 linqpad

您好,我有以下 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/

相关文章:

LINQ to Entities 无法识别方法 'System.String Format(System.String, System.Object, System.Object)'

c# - 保持IEnumerable和ObservableCollection同步

c# - 接口(interface)是否应该为拮抗剂方法提供定义?

c# - 如何向 ASP.NET Core 中的所有日志消息添加属性

c# - 无法在 http ://localhost 上启动驱动程序服务

c# - 是否可以在 LINQ-to-SQL 映射中使用泛型?

c# - 在 VS 2008 中运行单元测试项目时出现 DisconnectedContext 错误

c# - 从 linq where 语句返回

c# - 如何记录谓词表达式?

linq - EF如何按日期过滤数据