Это лучший способ реализовать универсальные функции репозитория для функциональности грид?
У меня есть сетка (gijgo), и я использую Generic Repository Pattern и UOW. И я только что начал Предикаты Linq. Итак, поскольку я использую Linq для сущностей, мой общий репозиторий должен иметь общие функциональные возможности сетки - получать, добавлять, удалять, редактировать, фильтровать и сортировать для всех уровней данных (через свойства навигации и объединения). Каков наилучший способ сделать это?
Я уже написал обобщенную функцию в моем общем хранилище, но я не знаю, будет ли она выполнять всю сложную логику данных сетки для любых сценариев любого модуля. Я новичок в предикате linq. Каковы лучшие источники для прохождения ускоренного курса, включая такие функции, как асинхронность и расширение?
Моя функция GenericRepository для получения данных сетки (для этого я использовал LinqPad)
public virtual List<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, params Expression<Func<TEntity, object>>[] includeProperties)
{
IQueryable<TEntity> query = DbSet;
foreach (Expression<Func<TEntity, object>> include in includeProperties)
query = query.Include(include);
if (filter != null)
query = query.Where(filter);
if (orderBy != null)
query = orderBy(query);
return query.ToList();
}
И я называю это, используя мои услуги как
UnitOfWork _unitOfWork = new UnitOfWork();
var _empRepository = new GenericRepository<Player>(new PredicateBuilderSampleEntities());
var emps = _empRepository.Get(x => x.CountryName == "Bulgaria" && x.total ==7,q => q.OrderByDescending(s => s.Name),includeProperties: player => player.Department).AsQueryable();
var query = emps.Where(item => item.Department.Did == item.DeptId)
.Select(X=> new
{
ID = X.ID,
Name = X.Name,
PlaceOfBirth = X.PlaceOfBirth,
CountryID = X.CountryID,
CountryName = X.CountryName,
OrderNumber = X.OrderNumber,
total = X.total,
Dname = X.Department.Dname
});
query.ToList().Dump();
И это дает мне результат, как показано ниже. Я делаю это правильно? Это лучший подход для этого? - универсальный репозиторий выполняет базовую фильтрацию, сортировку и достаточно ли этого для объединения (несколько свойств навигации (объединений) и фильтрация в сценариях дочерних свойств)?