2013-01-03 51 views
0

我是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()) 
+1

你的错误是什么? –

+0

不支持“计数”方法。 –

+0

你试过这个吗? foreach(var in serviceitem) –

回答

0

最后我成功解决了它。 Ids的比较帮助Foreach运行。

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

我看不到任何东西,立即错代码,它可能是你怎么也得设置你的项目和早期绑定类。

我建议阅读Using LINQ in CRM 2011 Plugins,请按照上述步骤操作,因为他描述了你想要达到的目标。

+0

正如我在链接中读到的那样:“... LINQ与CRM 2011不支持使用LINQ Count和Sum操作。”。我今天搜索了很多。每个在crm 2011插件中使用“foreach”的用户都会遇到类似的错误。有人知道为什么 –

+0

只是一个提示:当我删除诸如for,foreach等循环语法时,插件工作正常。在这种情况下,它只创建一个“brd_workreportitem”。当我把它放在一个循环中创建多个“brd_workreportitem”时,发现错误。因此,关于参考文献crm assembly的所有内容都是真实的。 –

0

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

以下是使用FetchXML的说明。

+0

使用“foreach”怎么样?我已经用过了,但是发生了错误,就像我之前所说的那样。 –

1

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

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

编辑:没有看到评论。

根据您提供的错误,看起来您没有在IOrganizationService上启用代理类型,或者未在服务器上包含您的自定义实体。

+0

谢谢你的回应Daryl。是的,我在代码的开头使用“using linq”语句。正如我在评论中提到的,我也使用了“foreach(serviceitem中的var item)”。它确实遇到了如上所述的错误。 –

相关问题