Salve a tutti,
stò facendo un test per vedere come linq (con una classe apposita) lavora con Microsoft Outlook.
mi sono imbattuto in una cosa strana.
allora io ho questo codice:
codice:
Dim outlookProvider As New OutlookProvider
Dim mails = From mail In outlookProvider.InboxItems
Order By mail.SentOnBehalfOfName
Select mail
Dim sentbehalf = mails.GroupBy(Function(s) s.SentOnBehalfOfName)
Dim m As Outlook.MailItem
For Each i In sentbehalf
Dim k = From ms In mails
Where ms.SentOnBehalfOfName = i(0).SentOnBehalfOfName
Select ms
For iEle As Integer = 0 To k.Count
m = k(iEle)
If m IsNot Nothing Then Console.WriteLine(m.SentOnBehalfOfName)
DestroyObject(m) ' funzione che distrugge l'oggetto COM
Next
Next
outlookProvider = Nothing
ora succede che, eseguendo il codice, funzioni tutto a regola d'arte (anche se potrei ottimizzarlo di più, ma vabbè, è una prova!)... però quando entro nel for each i il codice è molto lento (diciamo che per farmi vedere 102 elementi ci mette 15 secondi buoni).
decido allora di dimensionare k fuori dal for each, così:
codice:
Dim outlookProvider As New OutlookProvider
Dim mails = From mail In outlookProvider.InboxItems
Order By mail.SentOnBehalfOfName
Select mail
Dim sentbehalf = mails.GroupBy(Function(s) s.SentOnBehalfOfName)
Dim m As Outlook.MailItem
Dim k
For Each i In sentbehalf
k = From ms In mails
Where ms.SentOnBehalfOfName = i(0).SentOnBehalfOfName
Select ms
For iEle As Integer = 0 To k.Count
m = k(iEle)
If m IsNot Nothing Then Console.WriteLine(m.SentOnBehalfOfName)
DestroyObject(m) ' funzione che distrugge l'oggetto COM
Next
Next
outlookProvider = Nothing
solo che quando il programma esegue "For iEle As Integer = 0 To k.Count", mi viene sollevata un'eccezione:
Impossibile trovare il membro pubblico 'Count' nel tipo 'WhereSelectEnumerableIterator(Of MailItem,MailItem)'.
volevo capire il motivo di ciò e come posso porvi rimedio.
grazie
Andrea