Closed li-zheng-hao closed 1 year ago
i see this code in SaveAsync:
var models = new List<WriteModel<T>>(entities.Count());
foreach (var ent in entities)
{
if (PrepAndCheckIfInsert(ent))
{
models.Add(new InsertOneModel<T>(ent));
}
else
{
models.Add(new ReplaceOneModel<T>(
filter: Builders<T>.Filter.Eq(e => e.ID, ent.ID),
replacement: ent)
{ IsUpsert = true });
}
}
return session == null
? Collection<T>().BulkWriteAsync(models, unOrdBlkOpts, cancellation)
: Collection<T>().BulkWriteAsync(session, models, unOrdBlkOpts, cancellation);
entities.Count()
changed the location of iterator, then the later for loops can't read the data
I debugged with dnspy and found that the iterator could not satisfy the predicate condition after taking the value...
I don't know why, but this is not a MongoDB.Entities error, so I decided to close this issue
List<int> arr=new List<int>();
arr.AddRange(new []{1,2,3});
var res=arr.DistinctBy(it => it);
var cout=res.Count();
foreach (var re in res)
{
Console.Out.WriteLine("re:"+re);
}
Console.Out.WriteLine("1");
public static class Test
{
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector)
{
HashSet<TKey> hash = new HashSet<TKey>();
return source.Where<TSource>((Func<TSource, bool>) (p => hash.Add(keySelector(p))));
}
}
The cause of the problem has been found : https://github.com/ldqk/Masuit.Tools/issues/77
error info:
if i use tolist , then it works fine: