2013-01-03 92 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)」。它確實遇到了如上所述的錯誤。 –

相關問題