用于多个实体创建的CRM 2011插件

时间:2013-01-03 07:42:03

标签: plugins dynamics-crm-2011

我是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? P.S。:我也试过这个:

foreach (var s in serviceitem.ToList())

3 个答案:

答案 0 :(得分:0)

我无法看到该代码的任何问题,可能是您设置项目和早期绑定类的方式。

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

答案 1 :(得分:0)

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

以下是使用FetchXML的解释。

答案 2 :(得分:0)

最后,我成功解决了这个问题。 Ids的比较有助于预先运行。

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