我正在尝试创建一个可以接受以下参数的通用函数。
以下是我正在尝试复制的功能示例。
public List<T> GetDataPerPage<T>(IList<T> classType, int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<classType>().All(null).AsQueryable().Where(p => p.IsDeleted == false).OrderBy(p => p.orderByColumn).Skip(excludedRows).Take(pageSize).ToList();
}
我不确定它应该如何将 classType 和 orderByColumn 传递给函数。
非常感谢任何帮助。感谢
答案 0 :(得分:2)
您根本不需要传递classType
参数,因为在使用T
方法时会声明类型GetDataPerPage<T>()
,因此请将其更改为:
public List<T> GetDataPerPage<T>(int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(p => p.orderByColumn)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}
对于orderByColumn
参数,如果您要像您的示例那样进行比较,那么传入string
就可以了,但如果您想控制比较的逻辑使用string
类型的T
属性,然后传递这样的委托:
public List<T> GetDataPerPage<T>(int pageNum, int pageSize, Func<T, string> orderBy)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;
return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(orderBy)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}
用法:
var list = GetDataPerPage<T>(pageNum, pageSize, p => p.Property1);
答案 1 :(得分:1)
您已经知道“班级类型”.. T
:
GetRepo<T>().All(null)...
对于OrderBy
..自己传递给代表:
public List<T> GetDataPerPage<T>(IList<T> classType,
int pageNum,
int pageSize,
Func<T, object> orderBy)
{
...
return ... ... .OrderBy(orderBy)
}
并像这样传递代表:
GetDataPerPage(..., ..., ..., x => x.SomePropertyHere);