我正在使用Microsoft Dynamics CRM 2011和ADX Studios。在其中一个页面上,我正在尝试制作一个显示用户当前潜在客户数量的小部件。我想做一个LINQ查询,选择CRM数据库中主要实体的所有者等于当前用户的潜在客户数。我是LINQ的新手,所以我仍然试图掌握查询的语义。到目前为止,我的代码到目前为止所有潜在客户。我不太确定如何使用“where”子句来检查所有者id是否等于当前用户的ID。
count = context.LeadSet.ToList().Count();
答案 0 :(得分:4)
请参阅this answer:
Linq to CRM不支持任何聚合表达式,因此从性能角度来看,使用Fetch XML会更好。
答案 1 :(得分:0)
其中一个主要问题是查询还必须包含潜在客户的所有者。这是添加到crm的自定义字段。因此,ADX Studios使用的XRM文件必须使用CrmSvcUtil进行重建。我使用了以下批处理文件,可根据您的项目进行更改:
cd\"Program Files (x86)\Adxstudio\XrmPortals\6.0.0009\Framework"
CrmSvcUtil.exe /codeCustomization:"Microsoft.Xrm.Client.CodeGeneration.CodeCustomization, Microsoft.Xrm.Client.CodeGeneration" /url:https://contoso.com/XRMServices/2011/Organization.svc /username:user /password:password /out:"C:\Xrm.cs" /namespace:Xrm /servicecontextprefix:Xrm /servicecontextname:XrmServiceContext
pause
必须以管理员身份运行才能完成新的XRM文件。然后必须将该文件复制并粘贴到ADX Studio解决方案中。重建解决方案,当您进行查询时,智能感知将使用您的自定义字段。
var context = new XrmServiceContext();
var leadList = (from a in context.LeadSet
where a.customFieldOwnerId.Id == Id
select a).ToList().Count();
int count = leadList;
要在使用Microsoft Dynamics CRM时进行计数,必须在 .Count()之前使用 .ToList()。 这似乎是多余的,但如果你不这样做,你就会收到错误。
答案 2 :(得分:-1)
我不确定您LeadSet
的数据结构,但我想象的是:
context.LeadSet.Count(ls => ls.OwnerID == ownerId);
上面的内容会计算OwnerId
等于您的参数ownerId
的所有潜在客户的数量。
如果您想要匹配的对象,只需使用.Where
代替.Count
答案 3 :(得分:-3)
尝试使用lambda表达式
int count = context.LeadSet.Where(a=>a.currentUserName==currentUserName").Count();
或linq查询语法
int count=(from item in context.LeadSet.ToList()
where item.currentUserName==currentUserName
select item).count();