0

我是 CRM 2011 插件的新手。在这里,我是一段引发错误的代码:

private static void AddWRItoServiceActivity(IOrganizationService service, Guid id)
    {
        using (var crm = new XrmServiceContext(service))
        {

            var serviceactivity = crm.ServiceAppointmentSet.Where(c => c.Id == id).First();
            var serviceitem = crm.brd_serviceitemSet.Where( c => c.brd_RegardingServiceId == serviceactivity.ServiceId);

            for (int i = 1; i < serviceitem.Count(); i++)
            {
                var workReportItem = new brd_workreportitem
                   {
                       brd_name = "By payman Plugin",
                       brd_serviceappointment_brd_workreportitem = serviceactivity,
                   };
                crm.AddObject(workReportItem);
                crm.SaveChanges();
            }
        }
    }

我试过这个:

for (int i = 1; i < serviceitem.ToList().Count(); i++)

这也给出了错误。您能帮我计算一下这样的数还是使用其他语法(例如 foreach)?PS:我也试过这个:

foreach (var s in serviceitem.ToList())
4

4 回答 4

1

正如@Anwar 建议的那样,Linq to CRM 表达式最终会转换为不支持求和或聚合表达式的 QueryExpressions。我猜 Linq Count 方法正试图转换成一个会失败的 Count Queryexpression。现在为什么serviceitem.ToList().Count()不起作用,我更困惑。ToList 应该导致实体的获取,然后将其添加到列表中,然后使用您的标准 LINQ Count 方法...您确实有 LINQ 的 using 语句正确吗?

你为什么不使用一个foreach(var item in serviceitem)

编辑:没有看到评论。

根据您的提示中的错误,您似乎没有在 IOrganizationService 上启用代理类型,或者没有在服务器上包含您的自定义实体。

于 2013-01-03T21:45:36.503 回答
0

我看不出该代码有什么问题,这可能是您设置项目和早期绑定类的方式。

我建议阅读Using LINQ in CRM 2011 Plugins,尝试按照那里列出的步骤进行操作,因为他正在描述您想要实现的目标。

于 2013-01-03T09:52:14.900 回答
0

FetchXML 是唯一支持 Count 和 Sum 功能的东西。Count 和 Sum 被认为是一个聚合。不幸的是,聚合在你提到的 Linq 中不起作用。

这是使用FetchXML的说明。

于 2013-01-03T15:58:26.907 回答
0

最后我成功解决了。Id 比较有助于 foreach 运行。

var serviceitem = crm.brd_serviceitemSet.Where( c => c.brd_RegardingServiceId.Id == serviceactivity.ServiceId.Id);
于 2013-01-03T22:51:35.713 回答