【发布时间】:2013-04-30 19:41:13
【问题描述】:
更新
即使搜索联系人的名字或姓氏也会导致问题:
var contacts =
(
from c in context.ContactSet
join m in context.py3_membershipSet on c.ContactId equals m.py3_Member.Id
where m.statuscode.Value == 1
&& ((c.FirstName != null && c.FirstName == searchTerm) || (c.LastName!=null && c.LastName == searchTerm) || (c.FullName != null && c.FullName == searchTerm))
orderby c.LastName
select new
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
BranchCode = c.py3_BranchArea,
Branch = (c.FormattedValues != null && c.FormattedValues.Contains("py3_brancharea") ? c.FormattedValues["py3_brancharea"] : "N/a"),
JobTitle = c.JobTitle,
Organisation = (c.ParentCustomerId != null ? c.ParentCustomerId.Name : "N/a"),
joinedAsCode = c.py3_SOLACEMemberJoinedAs,
JoinedAs = (c.FormattedValues != null && c.FormattedValues.Contains("py3_solacememberjoinedas") ? c.FormattedValues["py3_solacememberjoinedas"] : "N/a"),
Expertise = (c.py3_SOLACEMemberAreasofExpertise != null && c.py3_SOLACEMemberAreasofExpertise.Trim() != String.Empty ? c.py3_SOLACEMemberAreasofExpertise : "N/a"),
Title = c.Salutation
}
);
回声:
'py3_membership' 实体不包含 Name = 'firstname' 的属性。
我从在线 CRM 中获取了以下代码:
var context = new XrmServiceContext();
var contacts1 =
(
from c in context.ContactSet
join m in context.py3_membershipSet on c.ContactId equals m.py3_Member.Id
where m.statuscode.Value == 1
orderby c.LastName
select new
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
BranchCode = c.py3_BranchArea,
Branch = (c.FormattedValues != null && c.FormattedValues.Contains("py3_brancharea") ? c.FormattedValues["py3_brancharea"] : "N/a"),
JobTitle = c.JobTitle,
Organisation = (c.ParentCustomerId != null ? c.ParentCustomerId.Name : "N/a"),
joinedAsCode = c.py3_SOLACEMemberJoinedAs,
JoinedAs = (c.FormattedValues != null && c.FormattedValues.Contains("py3_solacememberjoinedas") ? c.FormattedValues["py3_solacememberjoinedas"] : "N/a"),
Expertise = (c.py3_SOLACEMemberAreasofExpertise != null && c.py3_SOLACEMemberAreasofExpertise.Trim() != String.Empty ? c.py3_SOLACEMemberAreasofExpertise : "N/a")
}
);
然后我将它作为数组绑定到数据列表,一切正常。
但是我希望能够将结果限制为从下拉列表中选择的值,并希望以下工作:
var context = new XrmServiceContext();
var contacts1 =
(
from c in context.ContactSet
join m in context.py3_membershipSet on c.ContactId equals m.py3_Member.Id
where m.statuscode.Value == 1 &&
c.FormattedValues["py3_brancharea"] == ddlBranchTags.SelectedItem.Value
orderby c.LastName
select new
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
BranchCode = c.py3_BranchArea,
Branch = (c.FormattedValues != null && c.FormattedValues.Contains("py3_brancharea") ? c.FormattedValues["py3_brancharea"] : "N/a"),
JobTitle = c.JobTitle,
Organisation = (c.ParentCustomerId != null ? c.ParentCustomerId.Name : "N/a"),
joinedAsCode = c.py3_SOLACEMemberJoinedAs,
JoinedAs = (c.FormattedValues != null && c.FormattedValues.Contains("py3_solacememberjoinedas") ? c.FormattedValues["py3_solacememberjoinedas"] : "N/a"),
Expertise = (c.py3_SOLACEMemberAreasofExpertise != null && c.py3_SOLACEMemberAreasofExpertise.Trim() != String.Empty ? c.py3_SOLACEMemberAreasofExpertise : "N/a")
}
);
但是,这会引发以下错误:
Invalid 'where' condition. An entity member is invoking an invalid property or method.
即使我硬编码分支标签标准而不是 DDL 值,它也是一样的。 我还尝试在contacts1 集上进行选择,例如:
var results = contacts1.select(c=> c.BranchTag == ddlBranchTags.SelectedItem.Value
但这会引发同样的错误。
如果我删除 branchTag where 子句,它会按预期工作。 我认为可以公平地假设我已经任性了,所以任何有用/建设性的指针(对于 LINQ 新手)都会非常感激。谢谢。
【问题讨论】:
-
看看stackoverflow.com/questions/10820663/… 是否解决了这个问题。
-
@PeterMajeed 不,它没有。这里的问题似乎与 FormattedValues 有关。
-
@PeterMajeed 你说的没错!我对自己想做的事情感到非常困惑,以至于我没有运行正确的查询。无论如何,大脑打开并投入使用,使用双重“位置”实际上解决了问题。这么简单的解决方案。如果您做出并回答,我会很乐意将您标记为正确答案。
-
没问题!由于这实际上是 Dynamics 的 linq 提供程序的一个常见问题,因此我个人会投票结束这个问题,作为我链接的问题的副本,以便那里有更多的流量漏斗,但请随时在此处添加您自己的答案。
标签: c# linq linq-to-entities dynamics-crm-2011 dynamics-crm-online