如何对所有者==当前用户的实体计数进行LINQ查询?

时间:2013-10-28 17:50:05

标签: c# linq dynamics-crm-2011

我正在使用Microsoft Dynamics CRM 2011和ADX Studios。在其中一个页面上,我正在尝试制作一个显示用户当前潜在客户数量的小部件。我想做一个LINQ查询,选择CRM数据库中主要实体的所有者等于当前用户的潜在客户数。我是LINQ的新手,所以我仍然试图掌握查询的语义。到目前为止,我的代码到目前为止所有潜在客户。我不太确定如何使用“where”子句来检查所有者id是否等于当前用户的ID。

count = context.LeadSet.ToList().Count();

4 个答案:

答案 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();