sounds like you need a .ToList() somewhere...
i'd guess either:
1: What do you pass in as argument for the 'second' param (the
IEnumerable<TSecond>) ? if it's a queryable, then try and ToList() it
before enumerating?
2: .ToDictionary is lazily evaluated, so you need to .ToList() before
calling .ToDictionary..
On Thursday, 4 July 2013 11:58:03 UTC+1, Matteo Migliore wrote:
>
> Hi,
>
> I obtain the error "Collection was modified; enumeration operation may not
> execute." when I try to save (merge)
> a loaded entity.
>
> I use AutoMapper to write the values from the DTO (command) to the loaded
> entity and this method to synchronize
> the collection between the entity and the command:
>
> public static ICollection<TFirst> Synchronize<TFirst, TSecond>(
> this ICollection<TFirst> first,
> IEnumerable<TSecond> second,
> Func<TSecond, TFirst> convert = null,
> Func<TFirst, int> firstHash = null,
> Func<TSecond, int> secondHash = null)
> {
> if (firstHash == null)
> {
> firstHash = x => x.GetHashCode();
> }
>
> if (secondHash == null)
> {
> secondHash = x => x.GetHashCode();
> }
>
> if (convert == null)
> {
> convert = x => Mapper.Map<TFirst>(x);
> }
>
> var firstCollection = first.ToDictionary(x => firstHash(x), x => x);
> var secondCollection = second.ToDictionary(x => secondHash(x), x => x);
>
> var toAdd = secondCollection.Where(item => firstCollection.All(x =>
> x.Key != item.Key)).Select(x => convert(x.Value));
>
> foreach (var item in toAdd)
> {
> first.Add(item);
> }
>
> var toRemove = firstCollection.Where(item => secondCollection.All(x =>
> x.Key != item.Key));
>
> foreach (var item in toRemove)
> {
> first.Remove(item.Value);
> }
>
> return first;
> }
>
> How can I fix the problem?
>
> Thanks,
> Matteo
>
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.