У меня есть этот метод ниже для построения динамического запроса linq с разбиением на страницы и сортировкой.Но когда отправка для сортировки по свойству, которое имеет отношение к другой сущности, такой как Entity Product, имеет отношение к Customer и вызывает метод для получения Customer и в «includeProperties» отправляет Product, и я хочу сортировать по «Product.Name».это не сработало
Метод:
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "", int page = 0, int pagesize = 100, string sortColumn = "", string sortColumnDir = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (sortColumn != string.Empty && sortColumn.IndexOf(".") <= 0)
{
ParameterExpression[] typeParams = new ParameterExpression[] {
Expression.Parameter(typeof(TEntity), "")
};
System.Reflection.PropertyInfo pi = typeof(TEntity).GetProperty(sortColumn);
sortColumnDir = sortColumnDir == "asc" ? "OrderBy" : "OrderByDescending";
query = (IOrderedQueryable<TEntity>)query.Provider.CreateQuery(
Expression.Call(
typeof(Queryable),
sortColumnDir,
new Type[] { typeof(TEntity), pi.PropertyType },
query.Expression,
Expression.Lambda(Expression.Property(typeParams[0], pi), typeParams))
);
}
else if (orderBy != null)
{
query = orderBy(query);
}
else
{
query = query.OrderBy(obj => obj.Desativado);
}
query = query.Skip(page * pagesize).Take(pagesize);
return query.ToList();
}
Кто-нибудь может мне помочь?