Выводит постоянно null
Вот мой метод в Repository:
public virtual Task<TDocument> FindOneAsync(Expression<Func<TDocument, bool>> filterExpression)
{
return Task.Run(() => _collection.Find(filterExpression).FirstOrDefaultAsync());
}
тут у меня постоянно выводить null:
var dash = await dashRep.FindOneAsync(x => x.ChartsPage == cp.Id);
а если сделать так, (но тут мы загружаем 10000 записей в ОЗУ - это плохо)
var dashBoards = dashRep.AsQueryable().ToArray();
var dn1 = dashBoards.Where(x => x.ChartsPage == cp.Id).SingleOrDefault();
то выводит нормальный объект, помогите пожалуйста, что не так?
Вот моя сущность:
[BsonCollection("DashboardsNew")]
public class Dashboard : Document
{
[BsonRepresentation(BsonType.ObjectId)]
public ObjectId ChartsPage { get; set; }
public string Icon { get; set; }
public string Color { get; set; }
public string Tag { get; set; }
public string[] Groups { get; set; }
public decimal Value { get; set; }
public Translate Description { get; set; }
public Translate Measure { get; set; }
public Rate[] Rate { get; set; }
public bool IsFavourite { get; set; }
public bool ShowOnMain { get; set; }
public bool IsDefault { get; set; }
public DateTime? ModifiedOn { get; set; }
}
шаблон репозитория:
public class MongoRepository<TDocument> : IMongoRepository<TDocument>
where TDocument : IDocument
{
private readonly IMongoCollection<TDocument> _collection;
public MongoRepository(MongoProvider provider)
{
_collection = provider.db.GetCollection<TDocument>(GetCollectionName(typeof(TDocument)));
}
protected string GetCollectionName(Type documentType)
{
return ((BsonCollectionAttribute) documentType.GetCustomAttributes(
typeof(BsonCollectionAttribute),
true)
.FirstOrDefault())?.CollectionName;
}
public virtual IQueryable<TDocument> AsQueryable()
{
return _collection.AsQueryable();
}
public virtual IEnumerable<TDocument> FilterBy(
Expression<Func<TDocument, bool>> filterExpression)
{
return _collection.Find(filterExpression).ToEnumerable();
}
public virtual IEnumerable<TProjected> FilterBy<TProjected>(
Expression<Func<TDocument, bool>> filterExpression,
Expression<Func<TDocument, TProjected>> projectionExpression)
{
return _collection.Find(filterExpression).Project(projectionExpression).ToEnumerable();
}
public virtual TDocument FindOne(Expression<Func<TDocument, bool>> filterExpression)
{
return _collection.Find(filterExpression).FirstOrDefault();
}
public virtual Task<TDocument> FindOneAsync(Expression<Func<TDocument, bool>> filterExpression)
{
return Task.Run(() => _collection.Find(filterExpression).FirstOrDefaultAsync());
}
public virtual TDocument FindById(string id)
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id.ToString(), id);
return _collection.Find(filter).SingleOrDefault();
}
public virtual Task<TDocument> FindByIdAsync(string id)
{
return Task.Run(() =>
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id.ToString(), id);
return _collection.Find(filter).SingleOrDefaultAsync();
});
}
public virtual void InsertOne(TDocument document)
{
_collection.InsertOne(document);
}
public virtual Task InsertOneAsync(TDocument document)
{
return Task.Run(() => _collection.InsertOneAsync(document));
}
public void InsertMany(ICollection<TDocument> documents)
{
_collection.InsertMany(documents);
}
public virtual async Task InsertManyAsync(ICollection<TDocument> documents)
{
await _collection.InsertManyAsync(documents);
}
public void ReplaceOne(TDocument document)
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id, document.Id);
_collection.FindOneAndReplace(filter, document);
}
public virtual async Task ReplaceOneAsync(TDocument document)
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id, document.Id);
await _collection.FindOneAndReplaceAsync(filter, document);
}
public void DeleteOne(Expression<Func<TDocument, bool>> filterExpression)
{
_collection.FindOneAndDelete(filterExpression);
}
public Task DeleteOneAsync(Expression<Func<TDocument, bool>> filterExpression)
{
return Task.Run(() => _collection.FindOneAndDeleteAsync(filterExpression));
}
public void DeleteById(string id)
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id.ToString(), id);
_collection.FindOneAndDelete(filter);
}
public Task DeleteByIdAsync(string id)
{
return Task.Run(() =>
{
var filter = Builders<TDocument>.Filter.Eq(doc => doc.Id.ToString(), id);
_collection.FindOneAndDeleteAsync(filter);
});
}
public void DeleteMany(Expression<Func<TDocument, bool>> filterExpression)
{
_collection.DeleteMany(filterExpression);
}
public Task DeleteManyAsync(Expression<Func<TDocument, bool>> filterExpression)
{
return Task.Run(() => _collection.DeleteManyAsync(filterExpression));
}
}