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

本文关键字:实体 执行 查询 LINQ 所有者 用户 | 更新日期: 2023-09-27 18:37:14

我正在使用Microsoft Dynamics CRM 2011和ADX Studios。在其中一个页面上,我正在尝试制作一个小部件,该小部件将显示用户的当前潜在客户数量。我想执行一个 LINQ 查询,该查询选择潜在顾客计数,其中 CRM 数据库中潜在顾客实体的所有者等于当前用户。我是 LINQ 的新手,所以我仍在尝试掌握查询的语义。下面我有到目前为止的代码,它可以吸引所有潜在客户。我不太确定如何在"where"子句中工作,该子句检查所有者 id 是否等于当前用户的所有者 id。

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

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

看到这个答案:

Linq to CRM 不支持任何聚合表达式,因此从性能角度来看,使用 Fetch XML 会更好。

主要问题之一是查询还必须包括潜在客户的所有者。这是添加到 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;

若要在使用动态 CRM 时获取计数Microsoft必须使用 。ToList() 之前 。计数()。这可能看起来是多余的,但如果不这样做,就会出现错误。

我不确定你是LeadSet的数据结构,但我会想象这样的事情:

context.LeadSet.Count(ls => ls.OwnerID == ownerId);

上面拉取了OwnerId等于您的参数的所有潜在客户的计数 ownerId .

如果您想要匹配的对象,只需使用.Where代替.Count

使用 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();