Linq 错误:“where”条件无效。实体成员正在调用无效的属性或方法

Posted

技术标签:

【中文标题】Linq 错误:“where”条件无效。实体成员正在调用无效的属性或方法【英文标题】:Linq Error : Invalid 'where' condition. An entity member is invoking an invalid property or method 【发布时间】:2015-05-05 08:45:20 【问题描述】:

我在CRM2013 中运行 Linq 查询并抛出错误:

“位置”条件无效。实体成员正在调用无效的属性或方法。

我的代码如下

var conntionRecord1Id = (from connectionBase in orgServiceContext.CreateQuery("connection")
                         where connectionBase["record1roleid"] != null
                         select connectionBase["record1id"]
                        ).Distinct();

var query = from opportunity in orgServiceContext.CreateQuery("opportunity")
            where conntionRecord1Id.Contains(opportunity["opportunityid"])
            orderby opportunity["createdon"] ascending
            select new
            
                Topic = opportunity.Attributes.Contains("name") == true ? opportunity["name"] : null,
                OpportunityId = opportunity.Attributes.Contains("opportunityid") == true ? opportunity["opportunityid"] : null,
                PostalCode = opportunity.Attributes.Contains("new_address_postalcode") == true ? opportunity["new_address_postalcode"] : null,
            ;

错误在第二个查询中抛出。

【问题讨论】:

你没有加入 conntionRecord1Id 所以你的第二个查询没有意义 【参考方案1】:

where 子句的左侧必须是属性名称,右侧必须是值。

这是查询中的问题行:

// lhs must be something from the entity
where conntionRecord1Id.Contains(opportunity["opportunityid"]) 

Andy Meyers 在这里有一个很好的答案:https://***.com/a/15720786/1817350

带有 ConditionOperator.In 的 QueryExpression 可能更合适:https://***.com/a/21093122/1817350

【讨论】:

嗨@bvrce,var qe = new QueryExpression("opportunity"); qe.ColumnSet = new ColumnSet("name", "opportunityid", "new_address_postalcode"); qe.Criteria.AddCondition("opportunityid", ConditionOperator.NotIn, conntionRecord1Id.Cast().ToArray()); qe.Distinct = true; var 结果 = proxy.RetrieveMultiple(qe);但这给我带来了错误:格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 schemas.microsoft.com/xrm/2011/Contracts/Services:query 时出现错误。 尝试在案前对 conntionRecord1Id 调用 .ToList():conntionRecord1Id.ToList().Cast().ToArray()

以上是关于Linq 错误:“where”条件无效。实体成员正在调用无效的属性或方法的主要内容,如果未能解决你的问题,请参考以下文章

linq查询中不同级别导航属性的相同where条件的通用表达式函数

指定类型的成员XX”不支持实体LINQ。只有初始化,成员单位,和实体导航性能的支持。

动态 SQL 到 LINQ 实体框架

Oracle ORA-01722: 由于 WHERE IS NULL 条件导致的无效数字错误

如何在 Linq 的 where 条件下从可为空的日期时间中删除时间部分

实体框架 Linq 查询:.Where 链 vs &&